validación de rut en java
El RUT (Rol Único Tributario) es el identificador de personas (naturales o jurídicas) en Chile, consiste en un número natural más un dígito verificador. Ejemplo 1-9.
El dígito verificador, se puede verificar o calcular a través de una variante del algoritmo de código de control Módulo 11, ¿Por qué es una variante? Tiene una pequeña variante respecto al original, cuando el resto es 11, el dígito verificador es 0, si es 10 es K y el resto se mantiene (más información sobre el algoritmo).
Implementación en Java
Hay muchas formas de implementar el algoritmo, pero una que me sorprendio, por su sencillez y pocas líneas, es el método verificarRut de creations.cl (http://www.creations.cl/2009/01/generador-de-rut-y-validador/)
El siguiente ejemplo, crea una pequeña ventana, a ella le añade tres elementos, un JLabel, JTextfield y un JButton finalmente capturamos el evento del botón para verificar si el rut ingresado es correcto.
package org.deerme.examples; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; /** * This is an example RUT validation * @author deerme.org */ public class ValidarRut extends JFrame implements ActionListener { private JButton btnValidar; private JTextField txtRut; private JLabel labRut; public ValidarRut() { super ( "Ejemplo de Validación de RUT" ); this.setSize(300, 300); this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // Agregamos elementos a la ventana this.setLayout( new FlowLayout(FlowLayout.LEFT, 20, 10) ); labRut = new JLabel("Rut"); txtRut = new JTextField(20); txtRut.setText("16327531-7"); btnValidar = new JButton("Validar"); btnValidar.addActionListener(this); this.add(labRut); this.add(txtRut); this.add(btnValidar); this.setVisible(true); } public static void main(String[] args) { // TODO code application logic here new ValidarRut(); } public void actionPerformed(ActionEvent e) { // Validamos el RUt if (e.getSource()==btnValidar) { if ( txtRut.getText().length() > 0 ) { // Creamos un arreglo con el rut y el digito verificador String[] rut_dv = txtRut.getText().split("-"); // Las partes del rut (numero y dv) deben tener una longitud positiva if ( rut_dv.length == 2 ) { // Capturamos error (al convertir un string a entero) try { int rut = Integer.parseInt( rut_dv[0] ); char dv = rut_dv[1].charAt(0); // Validamos que sea un rut valido según la norma if ( this.ValidarRut(rut, dv) ) { JOptionPane.showMessageDialog(rootPane, "Rut correcto"); } else { JOptionPane.showMessageDialog(rootPane, "Rut incorrecto"); } } catch( Exception ex ) { System.out.println(" Error " + ex.getMessage()); } } } } } /* * Método Estático que valida si un rut es válido * Fuente : http://www.creations.cl/2009/01/generador-de-rut-y-validador/ */ public static boolean ValidarRut(int rut, char dv) { int m = 0, s = 1; for (; rut != 0; rut /= 10) { s = (s + rut % 10 * (9 - m++ % 6)) % 11; } return dv == (char) (s != 0 ? s + 47 : 75); } }
Saludos:
Está muy bueno el código, pero necesito saber cómo puedo hacer una clase la cual pueda ser llamada desde un botón en otra ventana independiente de la clase de validación de RUT. La idea es que pueda llamar a la clase desde más de un botón en distintas ventanas donde sea requerido.
Muchas gracias.
Armando
Si el método lo defines como estático, lo puedes llamar sin tener una instancia de el. Siempre y cuando la clase que contenga al método, este dentro del mismo package de tu proyecto o importes el package.
En el ejemplo, el método ValidarRut de la clase ValidarRut es estático, por lo tanto, lo puedes llamar desde cualquier otro punto sin tener una instancia de la clase, por ejemplo ValidarRut.ValidarRut(12345678,’k')
Saludos
Gracias por la respuesta. La duda que me queda cómo llamo a la clase en el botón, es decir, cómo es el código en el evento del JButton.
Otra cosa importante es que el RUT es ingresado en un JTextField dentro de un JFrame o JInternalFrame, una vez que se pasa a escribir en el JTextField siguiente, nos indique si el RUT o RUN ingresado es correcto.
Gracias desde ya y pido disculpas por preguntar tanto…
*** Creo que no existen preguntas tontas, sino tontos que no preguntan. ***
Armando
Lo puedes hacer de muchas formas, creo que lo más sencillo es capturar el string del JTextField, capturar los parámetros (rut más digito verificador) y entregar estos valores al método validador de rut. Todo eso en el evento que va a validar el rut (en un boton, al perder el focus del textfield, etc …), el código sería muy similar al del ejemplo:
Hola amigo probe tu codigo y si funciona perfecto quisiera saber como le hago para que me valide cuando el RUT contenga ademas del guion los puntos:
11111111-1 —> 11.111.111-1
como puedo validar de ambas formas’??
Victor, hay varias formas, creo que lo más correcto sería utilizar una expresión regular, para detectar si el string contenido en el input, primero válida a un rut con puntos.
Sin embargo, podemos saltarnos la validación con expresiones regulares y simplemente reemplazar los puntos por un vacío, de esa manera si el usuario ha ingresado el rut 11.111.111-1, vamos a operar con el string 11111111-1, en fines prácticos es más sencillo.
Solo deberías modificar la línea
por
Debería funcionar.
Saludos
[...] el digito verificador… eso nomas recuerdo :v Validador rut java en google, primer resultado: validaci ? [...]
http://www.qualityinfosolutions.com/validador-de-rut-chileno-en-java/
Podrán encontrar la solución al problema de validar un rut en java además pueden dejar sus dudas y estaremos encantados en poder ayudarlos.
Saludos
No puedo arrancar en Netbeans, como lo hago, gracias por la ayuda
Javier, no das muchos datos como para averiguar donde esta el problema, creo que primero verifica que tengas instalados el sdk y tu instalación de netbeans sepa donde esta el sdk. O instala la última versión de netbeans con el sdk incluido.
Luego crea un nuevo proyecto y agrega el código.
Cuentame si te aparece algún warning o error
Saludos
Javier debes buscar un archivo llamado .netbeans y renombrarlo. Es el error mas frecuente por el cual no abre netbeans y se debe a una mala configuración.
como puedo crear un validador sin entrar a lo de java grafico, ahora estuve haciendo una captura de varios datos, el codigo del validador es public boolean validarRut(String rut) {
boolean validacion = false;
try {
rut = rut.replace(“.”, “”);
rut = rut.replace(“-”, “”);
int rutAux = Integer.parseInt(rut.substring(0, rut.length() – 1));
char dv = rut.charAt(rut.length() – 1);
int m = 0, s = 1;
for (; rutAux != 0; rutAux /= 10) {
s = (s + rutAux % 10 * (9 – m++ % 6)) % 11;
}
if (dv == (char) (s != 0 ? s + 47 : 75)) {
validacion = true;
System.out.println(“su rut es valido”);
}
else{
System.out.print(“su rut es invalido”);
}
} catch (java.lang.NumberFormatException e) {
} catch (Exception e) {
}
return validacion;
}
}
pero mi problema es que no distingue el -K alguna solución? ¡, trabajo con netbeans.de antemano gracias.