viernes, 30 de septiembre de 2011

Clase Rut, Verificador y Formateador

Hace poco me encontré con la necesidad de tener un verificador de ruts, en Java, y llegué a la definición de nuestro gran amigo Wiki xD del Rol Único Tributario, en el cual también se encuentra el algoritmo para encontrarlo, además de algunos códigos para Visual, C#, entre otros... Pero yo lo quería para Java! jaja, así que hice mi clase y aquí se las dejo, por si alguien la necesita :D. Esta hecha con dos métodos estáticos, porque así se me ocurrió de primeras... pero también pueden extenderla de la clase String para tener Objetos tipo Rut, no lo he probado pero debería de poderse :)

Sin más, acá les dejo la clase:




/**
 * Clase encargada de formatear el rut con puntos y guiones,
 *  además de validarlo con su dígito verificador.
 * @author Danilo
 */
public class Rut {

    /**
     * Le da formato a un rut, concatenándole puntos y guión.
     * @param rut Rut a formatear.
     * @return Un nuevo String, con el rut formateado.
     */
    static public String formatear(String rut){
        int cont=0;
        String format;
        if(rut.length() == 0){
            return "";
        }else{
            rut = rut.replace(".", "");
            rut = rut.replace("-", "");
            format = "-"+rut.substring(rut.length()-1);
            for(int i = rut.length()-2;i>=0;i--){
                format = rut.substring(i, i+1)+format;
                cont++;
                if(cont == 3 && i != 0){
                    format = "."+format;
                    cont = 0;
                }
            }
            return format;
        }
    }

    /**
     * Valida un rut de acuerdo a su dígito verificador.
     * @param rut Rut a validar
     * @return true si el rut es válido,
     * false en cualquier otro caso.
     */
    static public boolean validar(String rut){
        int suma=0;
        String dvR,dvT;
        int[] serie = {2,3,4,5,6,7};
        rut = rut.replace(".", "");
        rut = rut.replace("-", "");
        dvR = rut.substring(rut.length()-1);
        for(int i = rut.length()-2;i>=0; i--){
            suma +=  Integer.valueOf(rut.substring(i, i+1))
                    *serie[(rut.length()-2-i)%6];
        }
        dvT=String.valueOf(11-suma%11);
        if(dvT.compareToIgnoreCase("10") == 0){
            dvT = "K";
        }

        if(dvT.compareToIgnoreCase(dvR) == 0){
            return true;
        } else {
            return false;
        }
    }
}

Disfrútenla! xD, y si encuentran algún error me avisan please! :)
Gracias! :)

6 comentarios:

  1. mmmm.... amigo soy nuevo en esto de java y quisiera saber como es que ocupo tu codigo si es que mi rut es ingresado en un jtextfield que se encuentra en otra clase?

    ResponderEliminar
  2. muchas gracias por tu código me ayudo a entender a un mas la validación de un rut

    ResponderEliminar
  3. Estimado, como lo hago con un Jtextbox ??

    ResponderEliminar