Buscar:

Búsqueda personalizada

Apr 17, 2009

Verificar / Validar CUIT / CUIL en Java

Ya sea en sistemas de gestión como en facturación o liquidación de haberes la necesidad de verificar la integridad y validez de una clave CUIL o CUIT puede ahorrarnos futuros dolores de cabeza cuando el operador ingrese mal un dato y nos haga perder varias horas de trabajo para subsanar el problema causado.

Básicamente una clave CUIL o CUIT está formada por dos números, un guión, otros ocho números, otro guión y un último número que hace las veces de dígito verificador.

import java.util.Arrays;


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

String cuit= "30-63945373-8";
cuit = cuit.substring(0, 2) + cuit.substring(3, 11) + cuit.substring(12);

//la secuencia de valores de factor es 5, 4, 3, 2, 7, 6, 5, 4, 3, 2
int factor = 5;

int[] c= new int[11];
int resultado = 0;

for (int i = 0; i <10; i++) {
//se toma el valor de cada cifra
c[i] = Integer.valueOf(Character.toString(cuit.charAt(i))).intValue();
//se suma al resultado el producto de la cifra por el factor que corresponde resultado = resultado + c[i]* factor;
//se actualiza el valor del factor
factor = (factor == 2)?7:factor - 1; }
//se obtiene el valor calculado a comparar
int control = (11 - (resultado % 11)) % 11;
//Si la cifra de control es igual al valor calculado
if (control == c[10]) {
System.out.println("CUIT Correcto");
}
else {
System.out.println("CUIT Erróneo");
}
}
}







Acá va el pseudocódigo, para los que usan otro lenguaje


Tomar CUIT (se supone que tiene que estar bien formado, es decir xx-xxxxxxxx-x)
Quitar los guiones del CUIT, al resultado lo llamaremos CUITLimpio
Asignar cada cifra de CUITLimpio restante a un valor en un array
Crear una variablE RESULTADO donde se almacenará el valor a controlar
Crear una variable que guarde el valor del factor por el que se multiplica cada cifra de CUITLimpio.
El factor va tomando los siguientes valores según la cifra de CUITLimpio:
5,4,3,2,7,6,5,4,3,2
IMPORTANTE: el ultimo valor del CUITLimpio no se multiplica por ningún factor, ya que es la cifra verificador
Para cada elemento del array, menos para el último
sumar al resultado el producto de cada cifra y el factor que le corresponde
Asignar a una variable llamada Control el resultado del siguiente cálculo:
RESTO((11 - (RESTO(RESULTADO/11)))/11)

donde RESTO es el resto del cociente entre A y B

Si Control es igual a la variable de control, entonces el CUIT es correcto

3 comments:

Unknown said...

El código fuente publicado tiene errores.

Este es el código corregido que funciona perfectamente:


public class CuilCuit {

public static void main(String[] args) {

String cuit = "30-63945373-8";
cuit = cuit.substring(0, 2) + cuit.substring(3, 11)
+ cuit.substring(12);

// la secuencia de valores de factor es 5, 4, 3, 2, 7, 6, 5, 4, 3, 2
int factor = 5;

int[] c = new int[11];
c[10] = Integer.parseInt(cuit.substring(10));
int resultado = 0;

for (int i = 0; i < 10; i++) {
// se toma el valor de cada cifra
c[i] = Integer.parseInt(Character.toString(cuit.charAt(i)));
// se suma al resultado el producto de la cifra por el factor que
// corresponde resultado = resultado + c[i]* factor;
resultado = resultado + c[i] * factor;
// se actualiza el valor del factor
factor = (factor == 2) ? 7 : factor - 1;
}
// se obtiene el valor calculado a comparar
int control = (11 - (resultado % 11)) % 11;
// Si la cifra de control es igual al valor calculado
if (control == c[10]) {
System.out.println("CUIT Correcto");
} else {
System.out.println("CUIT Erróneo");
}
}
}

juangiovanolli said...

Gracias Orlando, se me habrá pasado

Unknown said...

Aquí, una versión más reducida:

public class CuilCuit {

public static final boolean validar(String cuilCuit) {

cuilCuit = cuilCuit.replaceAll("-", "");

int resultado = 0;

for (int i = 0, factor = 5; i < 10; i++, factor = (factor == 2) ? 7 : factor - 1) {
resultado += Integer.parseInt(Character.toString(cuilCuit.charAt(i))) * factor;
}

return (11 - (resultado % 11)) % 11 == Integer.parseInt(cuilCuit.substring(10));
}

public static void main(String[] args) {

String cuit = "30-63945373-8";

if (validar(cuit)) {
System.out.println("CUIT Correcto");
} else {
System.out.println("CUIT Erróneo");
}
}

}