Validando Cif, Nif y Nie

VictorR Lunes, 29 de Junio del 2009

Etiquetas: ,

Del proyecto en el que trabajo en la actualidad he “sacado” estas tres piezas de código. Nada fuera de lo común, pero que sin duda sirven y servirán para una parte de las pequeñas tareas que se realizan en cada proyecto. Esto es, validar datos.

Como todo el mundo sabe, para que una aplicación, web, cosa… funcione, debe mantener un conjunto discreto de datos (esto siempre me gustó de las clases de mates), información, de una manera poco ambigua. Y por eso es necesario validar la mayoría de datos que la aplicación, web, cosa… acepta.

Básicamente hay dos maneras de validar los datos, una es en el navegador del cliente, con tecnologías tipo javascript, y la otra es en el servidor, por ejemplo con java, php… Poco más queda decir a parte de que la manera más fácil de controlar los datos y más segura es validar los datos a nivel de servidor. Ya sabes, desactivas el javascripi y te quedas sin validar.

Sim embargo, lo que os traigo aquí es javascript, ¿por qué? Porque a modo de “repositorio” quiero guardar estas “perlas” para futuros trabajos y que sirva a otros vagos de ayuda.

Validar CIF

String.prototype.testCIF = function(){
    var pares = 0;
    var impares = 0;
    var suma;
    var ultima;
    var unumero;
    var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I");
    var xxx;
   
    texto = this.toUpperCase();
   
    var regular = new RegExp(/^[ABCDEFGHKLMNPQS]\d{7}[0-9,A-J]$/g);
    if (!regular.exec(texto)) return false;
         
    ultima = texto.substr(8,1);

    for (var cont = 1 ; cont < 7 ; cont ++){
        xxx = (2 * parseInt(texto.substr(cont++,1))).toString() + "0";
        impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
        pares += parseInt(texto.substr(cont,1));
    }
    xxx = (2 * parseInt(texto.substr(cont,1))).toString() + "0";
    impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
     
    suma = (pares + impares).toString();
    unumero = parseInt(suma.substr(suma.length - 1, 1));
    unumero = (10 - unumero).toString();
    if(unumero == 10) unumero = 0;
     
    if ((ultima == unumero) || (ultima == uletra[unumero]))
        return true;
    else
        return false;
}

Validar DNI

String.prototype.testDNI = function() {
    dni = this.toUpperCase();
    numero = dni.substr(0,dni.length-1);
    let = dni.substr(dni.length-1,1);
    let = let.toUpperCase();
    numero = numero % 23;
    letra = 'TRWAGMYFPDXBNJZSQVHLCKET';
    lletra = letra.charAt(numero);
   
    return (lletra == let)
}

Validar NIE

String.prototype.testNIE = function() {
    var dni = this.toUpperCase();
    var pre = dni.substr(0, 1);
    var prev = '0';
    if (pre == 'X')
       prev = '0';
    else if (pre == 'Y')
       prev = '1';
    else if (pre == 'Z')
       prev = '2';
    numero = prev + dni.substr(1,dni.length-1);
    return numero.testDNI();
}

Si os dáis cuenta, las funciones extienden la clase String de javascript, esto es simplemente para que sea más facil de utilizar y lo más “orientado” a objetos posible.

Ejemplo de USO

// validación de un DNI
"74185296S".testDNI();      // value: true

NOTA: que quede claro que el código no me lo he inventado yo, lo he adaptado de los recursos que se pueden encontrar en la inmensidad de internet. Lo que pasa es que no recuerdo de dónde los saqué, ni si lo saqué yo, y no puedo poner la retribución que se merece el autor/es de dichos scripts.

4 comentarios a "Validando Cif, Nif y Nie" »
Comentario de espinete — Martes, 11 de Agosto del 2009 @ 13:18

habrá alguna referencia en el boe , no ?

saludos

Comentario de VictorR — Miércoles, 12 de Agosto del 2009 @ 12:00

Pues, a saber, los temas legales los dejo para mi abogado…

Comentario de Casimiro — Martes, 10 de Noviembre del 2009 @ 12:11

Muxas grazias, m a alludado a sako

Comentario de Raul — Miércoles, 10 de Marzo del 2010 @ 15:13

Genial!!!

Muchas gracias.

Suscripción RSS a los comentarios de esta entrada. TrackBack URL

Deja tu comentario

* Obligatorio. ** Obligatorio, no será publicado.