Datos extra:
function boolean validaCIF(Object cif) {
boolean resultado = false;
try {
String vCif = cif.toString().trim();
int suma = 0;
int contador = 0;
int temporal = 0;
int codigoControl = 0;
String cadenaTemporal = null;
String valoresCif = "ABCDEFGHJKLMNPQRSUVW";
String letraControlCIF = "0123456789";
String letraSociedadNumerica = "KLMNPQRSW";
String primeraLetra = null;
String ultimaLetra = null;
if (!(vCif.length() == 9))
return false;
if (vCif.matches("[^A-Za-z0-9]"))
return false;
vCif = vCif.toUpperCase();
primeraLetra = vCif.substring(0, 1);
ultimaLetra = vCif.substring(8, 9);
if (valoresCif.indexOf(primeraLetra) < 0)
return false;
suma = suma + Integer.parseInt(vCif.substring(2, 3))
+ Integer.parseInt(vCif.substring(4, 5))
+ Integer.parseInt(vCif.substring(6, 7));
for (contador = 1; contador < 8; contador = contador + 2) {
temporal = (Integer.parseInt(vCif.substring(contador, contador + 1)) * 2);
if (temporal < 10)
suma = suma + temporal;
else {
cadenaTemporal = String.valueOf(temporal);
suma = suma + (Integer.parseInt(cadenaTemporal.substring(0, 1)))
+ (Integer.parseInt(cadenaTemporal.substring(1, 2)));
}
}
codigoControl = ((10 - (suma % 10)) % 10);
if (letraSociedadNumerica.indexOf(primeraLetra) >= 0) {
byte[] ascii = new byte[1];
if (codigoControl == 0)
codigoControl = 10;
codigoControl = codigoControl + 64;
ascii[0] = (Integer.valueOf(codigoControl)).byteValue();
resultado = (ultimaLetra.equals(new String(ascii)));
} else {
resultado = (codigoControl == letraControlCIF.indexOf(ultimaLetra));
}
} catch (Exception e) {
resultado = false;
}
return resultado;
}