xchanox Posted December 9, 2010 Report Share Posted December 9, 2010 (edited) completamente revisado y a prueba de cualquier error de usuario, no tengo tiempo de explicartelo bien, cuando llegue a mi casa pongo las explicaciones public void validar(String rut_ingresado) { String RUT = rut_ingresado; String RUT_limpio = ""; for(int i = 0; i < RUT.length(); i++ ) { if((RUT.charAt(i) != '.') & (RUT.charAt(i) != '-')) {RUT_limpio += RUT.charAt(i);} } mostrar_dialogo(RUT_limpio); boolean esNumero = false; try{new Integer(RUT_limpio);esNumero = true;} catch(Exception e){} if(RUT_limpio.length() != 9 | esNumero == false) {/* aqui tu codigo cuando un rut se ingreso mal, ejem. letras*/} else { mostrar_dialogo("Verificando RUT"); // aqui se comprueba el rut con su digito verificador int suma = 0; suma += Integer.parseInt(RUT_limpio.charAt(0) + "") * 3; suma += Integer.parseInt(RUT_limpio.charAt(1) + "") * 2; suma += Integer.parseInt(RUT_limpio.charAt(2) + "") * 7; suma += Integer.parseInt(RUT_limpio.charAt(3) + "") * 6; suma += Integer.parseInt(RUT_limpio.charAt(4) + "") * 5; suma += Integer.parseInt(RUT_limpio.charAt(5) + "") * 4; suma += Integer.parseInt(RUT_limpio.charAt(6) + "") * 3; suma += Integer.parseInt(RUT_limpio.charAt(7) + "") * 2; int verificador = 11 - suma%(suma/11); mostrar_dialogo(verificador + ""); if(verificador == Integer.parseInt(RUT_limpio.charAt(8) + "")) {/* aqui tu codigo para rut con verificador correcto*/;} else{/*aqui tu codigo para digito verificador incorrecto*/;} } } edito: mas abajo voy a poner algunas aclaraciones Edited December 10, 2010 by xchanox Link to comment Share on other sites More sharing options...
PabloDag Posted December 10, 2010 Author Report Share Posted December 10, 2010 Mira esto es lo que tengo yo para validar y funciona package validarrut; import java.util.StringTokenizer; class Validar { Validar(){ } boolean validarRut(String rut) { /*aqui es donde le tengo que dar la condicion que entre al ciclo solo si rut tiene "-" lo hice con un metodo pero nose que paso el programa no se cae pero si me lo ingresan sin rut y el largo del caracter es 9, entonces 9 veces muestra el emnsaje que es invalido el codigo que le puse fue el siguiente: for (int i=0;i<d.length();i++)//aqui recorre el string que le ingresan if(!d.substring(i,i+1).equals("-")){//pregunta por el guion y si no esta System.out.print("Ingrese rut nuevamente: ");//muestra esto en pantalla } pero este codigo aun asi no me funciono*/ if(rut.length()<10 && rut.length()>12){ System.out.print("Rut Invalido intentelo nuevamente"); } else if(rut.length()==12){//con 12 caracteres se supone que el rut ingresado es con 2 puntos (11.111.111.-4) StringTokenizer rut1=new StringTokenizer(rut,".");//aqui se los quita String rut2=""; rut2=rut1.nextToken(); rut2=rut2.concat(rut1.nextToken()); rut2=rut2.concat(rut1.nextToken()); String[] cadena = rut2.split("-");//aqui guarda todo lo que esta antes del guin int factorial = 2; int suma = 0; for (int i = cadena[0].length() - 1; i >= 0; i--) { suma += Integer.valueOf( String.valueOf( cadena[0].charAt(i) ) ) * factorial; factorial++; if (factorial > 7) factorial=2; } int resto = suma % 11; int dv = 11 - resto; String revisar_dv; if (dv == 10) { revisar_dv = "K"; } else if (dv == 11) { revisar_dv = "0"; } else { revisar_dv = String.valueOf(dv); } if ( revisar_dv.matches( cadena[1].toUpperCase() ) ) { System.out.print("Rut valido con puntos"); return true; } else{ System.out.print("Rut invalido intentelo Nuevamente con puntos"); return false; } } else if(rut.length()==10) { String[] cadena = rut.split("-"); int factorial = 2; int suma = 0; for (int i = cadena[0].length() - 1; i >= 0; i--) { suma += Integer.valueOf( String.valueOf( cadena[0].charAt(i) ) ) * factorial; factorial++; if (factorial > 7) factorial=2; } int resto = suma % 11; int dv = 11 - resto; String revisar_dv; if (dv == 10) { revisar_dv = "K"; } else if (dv == 11) { revisar_dv = "0"; } else { revisar_dv = String.valueOf(dv); } if ( revisar_dv.matches( cadena[1].toUpperCase() ) ) { System.out.print("Rut valido sin puntos"); return true; } else{ System.out.print("Rut invalido intentelo Nuevamente sin puntos"); return false; } } else if(rut.length()==11){ StringTokenizer rut1=new StringTokenizer(rut,"."); String rut2=""; rut2=rut1.nextToken(); rut2=rut2.concat(rut1.nextToken()); //rut2=rut2.concat(rut1.nextToken()); String[] cadena = rut2.split("-"); int factorial = 2; int suma = 0; for (int i = cadena[0].length() - 1; i >= 0; i--) { suma += Integer.valueOf( String.valueOf( cadena[0].charAt(i) ) ) * factorial; factorial++; if (factorial > 7) factorial=2; } int resto = suma % 11; int dv = 11 - resto; String revisar_dv; if (dv == 10) { revisar_dv = "K"; } else if (dv == 11) { revisar_dv = "0"; } else { revisar_dv = String.valueOf(dv); } if ( revisar_dv.matches( cadena[1].toUpperCase() ) ) { System.out.print("Rut valido con un punto"); return true; } else{ System.out.print("Rut invalido intentelo Nuevamente con un punto"); return false; } } else System.out.print("Rut con sobra de caracteres"); return false; } } Eso es lo que tengo ahi lo dejo para que lo ocupen aquellos que les sirva Link to comment Share on other sites More sharing options...
$[Mito]$ Posted December 10, 2010 Report Share Posted December 10, 2010 Mira, creo q te saldria mejor olvidarte si el usuario ingresa guiones o puntos por que a lo mejor no todos los van a ingresar igual. Por Ej: rut="1.111.111-1" rut = rut.replace(".",""); rut = rut.replace("-",""); rut=rut.trim(); o rut="1111111-1" rut = rut.replace(".",""); rut = rut.replace("-",""); rut=rut.trim(); Entonces en los 2 casos quedaria igual(11111111). Link to comment Share on other sites More sharing options...
xchanox Posted December 10, 2010 Report Share Posted December 10, 2010 (edited) $' date='10 Dec 2010, 00:09' post='15114788'] Mira, creo q te saldria mejor olvidarte si el usuario ingresa guiones o puntos por que a lo mejor no todos los van a ingresar igual. Por Ej: rut="1.111.111-1" rut = rut.replace(".",""); rut = rut.replace("-",""); rut=rut.trim(); o rut="1111111-1" rut = rut.replace(".",""); rut = rut.replace("-",""); rut=rut.trim(); Entonces en los 2 casos quedaria igual(11111111). Es casi lo mismo que puse yo, pero solo poniendo eso igual queda muy propenso a errores, ¿que pasa si el usuario ingresa letras en vez de números? el codigo mio se ve largo porque incluye tambien la validacion del rut no solo de la escritura. Aclaraciones de mi post anterior (el del codigo): te lo había dicho por MP, pero mejor lo pongo aquí también para no crear confuciones. - En estos momentos el verificador 10 se trata como 10 y no como K, se debe modificar antes de hacer la comparación del dígito verificador. Es mejor que reemplaces la k po 10 y no el 10, así la comprobacion del verificador se mantiene intacta. - como la K no fue considerada, en el "try{new Integer(RUT_limpio)...}" antes de hacer el new Integer debes pasar RUT_limpio a un string temporal quitandole el último dígito (correspondiente al dígito verificador) - las lineas que contengan "mostrar_dialogo(...)" corresponden a un popup que uso para ir viendo valores temporales ya que la consola de java no me acomoda, basta con quitar esas líneas. Edited December 10, 2010 by xchanox Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now