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:
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");
}
}
}
Gracias Orlando, se me habrá pasado
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");
}
}
}
Post a Comment