Jump to content

Validacion JAVA


Recommended Posts

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 by xchanox
Link to comment
Share on other sites

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

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

$' 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 by xchanox
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...