Foros del Web » Programación para mayores de 30 ;) » Java »

validar Cif

Estas en el tema de validar Cif en el foro de Java en Foros del Web. Tengo un algoritmo para validar cif, que esta cogido de intenet, pero por ejemplo con el cif: A4001076A que si es valido no me lo ...
  #1 (permalink)  
Antiguo 08/11/2010, 05:50
 
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 352
Antigüedad: 15 años, 6 meses
Puntos: 5
validar Cif

Tengo un algoritmo para validar cif, que esta cogido de intenet, pero por ejemplo con el cif: A4001076A que si es valido no me lo coje.

A ver si alguien tiene otro algoritmo.

yo tengo:

public static boolean validarCIF(String cif) {

cif=cif.trim().toUpperCase();

final Pattern cifPattern = Pattern.compile("[[A-H][J-N][P-S]UVW][0-9]{7}[0-9A-J]");
final String CONTROL_SOLO_NUMEROS = "ABEH"; // Sólo admiten números como caracter de control
final String CONTROL_SOLO_LETRAS = "KPQS"; // Sólo admiten letras como caracter de control
final String CONTROL_NUMERO_A_LETRA = "JABCDEFGHI"; // Conversión de dígito a letra de control.

try {
if (!cifPattern.matcher(cif).matches()) {
// No cumple el patrón
return false;
}

int parA = 0;
for (int i = 2; i < 8; i += 2) {
final int digito = Character.digit(cif.charAt(i), 10);
if (digito < 0) {
return false;
}
parA += digito;
}

int nonB = 0;
for (int i = 1; i < 9; i += 2) {
final int digito = Character.digit(cif.charAt(i), 10);
if (digito < 0) {
return false;
}
int nn = 2 * digito;
if (nn > 9) {
nn = 1 + (nn - 10);
}
nonB += nn;
}

final int parcialC = parA + nonB;
final int digitoE = parcialC % 10;
final int digitoD = (digitoE > 0) ?
(10 - digitoE) :
0;
final char letraIni = cif.charAt(0);
final char caracterFin = cif.charAt(8);

final boolean esControlValido =
// ¿el caracter de control es válido como letra?
(CONTROL_SOLO_NUMEROS.indexOf(letraIni) < 0
&& CONTROL_NUMERO_A_LETRA.charAt(digitoD) == caracterFin)
||
// ¿el caracter de control es válido como dígito?
(CONTROL_SOLO_LETRAS.indexOf(letraIni) < 0
&& digitoD == Character.digit(caracterFin, 10));
return esControlValido;

} catch (Exception e) {
return false;
}

}

Etiquetas: cif
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:17.