Buenas, en la
consultora donde trabajo he tenido que implementar validaciones de este tipo en la aplicación web.
Aunque la validación mediante JavaScript es fácil de saltarsela (usando FireBug, por ejemplo), para los usuarios no tocapelotas viene bien dar un aviso antes de enviar la información.
Siempre es acosejable validar más tarde al recibir los datos.
Bueno, aquí te pongo las funciones para validar CIF, NIF/NIE y NSS, la primera no funciona sin la segunda.
Código:
function checkCIF(cf)
{
var i = temp = 0;
var v1 = new Array(0,2,4,6,8,1,3,5,7,9);
cf = cf.toUpperCase();
if (checkNIF(cf)) return true;
else if (!/^[A-Za-z0-9]{9}$/.test(cf)) return false
else if (!/^[ABCDEFGHKLMNPQS]/.test(cf)) return false
else
{
for(i=2; i<=6; i+=2)
{
temp += v1[parseInt(cf.substr(i-1, 1))];
temp += parseInt(cf.substr(i, 1));
}
temp = temp + v1[parseInt(cf.substr(7,1))];
temp = (10 - ( temp % 10));
if(temp == 10 && (cf.charAt(cf.length-1) == 'J' || cf.charAt(cf.length-1) == 0)) return true;
else if (cf.charAt(cf.length-1) == temp || cf.charAt(cf.length-1) == String.fromCharCode(64 + temp)) return true;
else return false;
}
}
function checkNIF(nif) {
if (!nif) return false;
var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
if (nif.length != 9) return false;
else {
letra = nif.substr(8, 1); letra = letra.toUpperCase();
dni = nif.substr(0, 8);
dni = dni.toUpperCase(); dni = dni.replace('X','0');
dni -= parseInt(dni/23) * 23;
//alert (letras.charAt(dni) + " - " + letra);
if (letras.charAt(dni) != letra) return false;
else return true;
}
}
function checkNSS(nss) {
if (!nss) return false;
if (nss.length != 11 && nss.length != 12) return false;
if (nss.substr(2, 1) == 0) nss = "" + nss.substr(0, 2) + nss.substr(3, nss.length-1);
if (mod(nss.substr(0, nss.length-2), 97) == nss.substr(nss.length-2, 2)) return true;
else return false;
}
La forma de funcionamiento es sencilla: le mandamos el valor y nos devuelve
true si es bueno y
false en caso contrario.
Espero que le sirva a más de uno.