La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1263 - COMO VALIDAR EL RUT
Autor:  Jonny BS
Alguien me podria decir como se valida el rut. Me refiero que cuando ingreso 154456355 me aparesca automaticamente el digito 5

  Respuesta:  rodrigo plaza
import java.io.*;
class a{
public static void main(String[]args)throws IOException{
int dv,sum, mult,pot,rest;
double num,suma,resto,digito;
suma=0;
mult=3;
BufferedReader leer=new BufferedReader(new InputStreamReader(System.in));
System.out.print("Ingrese Rut:");
num=Double.parseDouble(leer.readLine());

for ( pot =7 ; pot >=0 ; pot-- ){
digito=(num/(Math.pow(10,pot)));
num=(num%(Math.pow(10,pot)));
digito=(int)digito;
suma=suma+(digito*mult);
mult--;
if (mult==1)
mult=7;
}
sum=(int)suma;
resto=sum%11;
rest=(int)resto;
dv=11-rest;
if((dv>=1)&&(dv<=9)){
System.out.println("El digito es:"+dv);
}else{
if(dv==10){
System.out.println("El digito es:K");
}else if (dv==11){
System.out.println("El digito es:0");
}
}
}
}

  Respuesta:  kurohito s
aca lo tengo en java pero lo puedes mejorar si quieres
(lo tengo activado con el IOConsole que es para facilitar el uso de java si quieres mandame un mail si quieres que te lo mande)

public class digito{
public static void main(String[]args){

/*declaraciones*/
int rut, mult1, mult2, mult3, mult4, mult5, mult6, mult7, mult8;
int a, b, c, d, e, f, g, h, suma, resta, division;

IOConsole.println("ingrese su rut omitiendo el codigo verifecador");
rut=IOConsole.readInt();
/*divido el rut digito pòr digito*/

a=(rut%100000000)/10000000;
b=(rut%10000000)/1000000;
c=(rut%1000000)/100000;
d=(rut%100000)/10000;
e=(rut%10000)/1000;
f=(rut%1000)/100;
g=(rut%100)/10;
h=(rut%10);

/*cada resultado lo multiplico para poder luego sumarlo*/
mult1=a*3;
mult2=b*2;
mult3=c*7;
mult4=d*6;
mult5=e*5;
mult6=f*4;
mult7=g*3;
mult8=h*2;

/* los resultados los sumo*/

suma=(mult1+mult2)+(mult3+mult4)+(mult5+mult6)+(mult7+mult8);

division=suma%11;

resta=11-division;

if(resta>=10){
IOConsole.println("su digito verificador es:");
IOConsole.println("k");
}else{IOConsole.println("sucodigo verificador es");
IOConsole.println(""+resta);
}

}
}

  Respuesta:  Lucía Gutiérrez
Tomas el Rut y separas sus dígitos. Partiendo desde el menos significativo(derecha), se comienza a multiplicar por 2, luego 3, 4,5,6 y 7, después se vuelve a 2 y a 3 y así sucesivamente. Los resultados de esas multiplicaciones se suman.
Por ejemplo :
rut : 12.345.678 quedaría =>
= 8*2 +7*3 +6*4 +4*5 +4*6 +3*7 +2*2 +1*3
= 16 + 21 + 24 + 20 + 24 + 21 + 4 + 3
= 133
Este resultado se divide en forma entera por 11, y el "resto", lo que le sobra a la parte entera de la división es restado a 11.
133 : 11 = 12
1
En este caso el 1 es el resto, por lo tanto se hace la resta : 11 - 1 = 10
Si hubiera dado un dígito simple se deja ese número como dígito verificador, pero como es 10, se reemplaza por K.
El resultado sería : 12.345.678-K

Esa es la metodología, tú lo programas como quieras.

  Respuesta:  Alex Formas Diaz
Hola : Aqui te envio una rutina del diguito verificador, la cual tienes que mejorar, esta Hecha en FoxPro.


rut=m.rut
seek rut
if .not.found()
if m.dig=´ ´
_curobj=1
else
rut_c=str(m.rut,8,0)
ax1=val(substr(rut_c,1,1))*3
ax2=val(substr(rut_c,2,1))*2
ax3=val(substr(rut_c,3,1))*7
ax4=val(substr(rut_c,4,1))*6
ax5=val(substr(rut_c,5,1))*5
ax6=val(substr(rut_c,6,1))*4
ax7=val(substr(rut_c,7,1))*3
ax8=val(substr(rut_c,8,1))*2
ax9=ax1+ax2+ax3+ax4+ax5+ax6+ax7+ax8
ax10=11-(ax9-(int(ax9/11)*11))
ax11=ltrim(str(ax10,2))
do case
case ax11=´11´
ax11=´0´
case ax11=´10´
ax11=´K´
endcase
IF ax11<>m.dig
_curobj=1
ELSE
do pdialog
rut = val(substr(rut_prv,1,8))
dig = right(rut_prv,1)
n_prv = nom_prv
select 1
m.rut_p = pag_prv.rut_prv
_curobj=1
ENDIF
endif
else
rut = val(substr(rut_prv,1,8))
dig = right(rut_prv,1)
n_prv = nom_prv
select 1
m.rut_p = pag_prv.rut_prv
endif
show gets
set near off


PROCEDURE RUT_PRG
rut_c=str(m.rut,8,0)
ax1=val(substr(rut_c,1,1))*3
ax2=val(substr(rut_c,2,1))*2
ax3=val(substr(rut_c,3,1))*7
ax4=val(substr(rut_c,4,1))*6
ax5=val(substr(rut_c,5,1))*5
ax6=val(substr(rut_c,6,1ð/LM/W3SVC/116/Root