function validaNIFCIF(campo){// VALIDATE REGEX RULES var error = 0; var valor = campo.value; var comprueba = ValidaCIFFormulario(valor); var comprueba2 = false; var comprueba3 = false; if(comprueba != true){ comprueba2 = comprobarDNIFormulario(valor); } if(comprueba2 != true && comprueba != true){ comprueba3 = comprobarAltaNIE(valor); } if(comprueba3 != true && comprueba != true && comprueba2 != true){ error = 1; var texto = ""; if(comprueba != false || comprueba2 != false || comprueba3 != false) { if(comprueba != false) texto+=comprueba; if(comprueba2 != false) texto+=comprueba; if(comprueba3 != false) texto+=comprueba; } else { texto += "* El texto introducido no pertenece a un NIF/CIF/NIE válido.
"; error = 1; } //alert(texto); } if (error == 1) {alert("Error en el NIF/CIF"); return false;} else {return true;} } function ValidaCIFFormulario(cif) { var cifLetras='JABCDEFGHI' var v1 = new Array(0,2,4,6,8,1,3,5,7,9); var numeroCIF; var letra; var dc; var sumaA = 0; var sumaB = 0; var sumaC = 0; if (cif) { cif = cif.toUpperCase(); if (esPatronCIF(cif)) { letra = cif.substring(0, 1); numeroCIF = cif.substring(1, cif.length - 1); dc = cif.charAt(cif.length - 1); }else if (esPatronCIFsinDC(cif)) { letra = cif.substring(0, 1); numeroCIF = cif.substring(1, cif.length); dc = ''; }else{ return false; } sumaA = parseInt(numeroCIF.charAt(1)) + parseInt(numeroCIF.charAt(3)) + parseInt(numeroCIF.charAt(5)); //bucle sumaB = 0; for (var i = 0; i <= 6; i += 2) { sumaTmp = parseInt(numeroCIF.charAt(i)) * 2 if (sumaTmp.toString().length == 2) { sumaB = sumaB + parseInt(sumaTmp.toString().charAt(0)) + parseInt(sumaTmp.toString().charAt(1)); }else{ sumaB = sumaB + parseInt(sumaTmp.toString().charAt(0)); } } sumaC = sumaA + sumaB; posicion = 10 - (sumaC % 10); if (posicion == 10) { posicion = 0; } if (dc == '') { return ("La letra o dígito de control del CIF debería ser: " + posicion + " o " + cifLetras.charAt(posicion)); }else{ if ((letra == 'K' || letra == 'k' || letra == 'P' || letra == 'p' || letra == 'Q' || letra == 'q' || letra == 'S' || letra == 's' ) && cifLetras.charAt(posicion) == dc) { return true; }else if((letra == 'A' || letra == 'a' || letra == 'B' || letra == 'b' || letra == 'E' || letra == 'e' || letra == 'H' || letra == 'h' ) && posicion == parseInt(dc)) { return true; }else if (posicion == parseInt(dc) || cifLetras.charAt(posicion) == dc) { return true; }else { if (letra == 'K' || letra == 'k' || letra == 'P' || letra == 'p' || letra == 'Q' || letra == 'q' || letra == 'S' || letra == 's' || letra == 'W' || letra == 'w' ) { return ("La letra de control del CIF debería ser: " + cifLetras.charAt(posicion)); }else if(letra == 'A' || letra == 'a' || letra == 'B' || letra == 'b' || letra == 'E' || letra == 'e' || letra == 'H' || letra == 'h' || letra == 'C' || letra == 'c' || letra == 'D' || letra == 'd' || letra == 'F' || letra == 'f' || letra == 'G' || letra == 'g' || letra == 'J' || letra == 'j' || letra == 'U' || letra == 'u' || letra == 'V' || letra == 'v' ) { return ("El dígito de control del CIF debería ser: " + posicion ); }else{ return ("La letra o dígito de control del CIF debería ser: " + posicion + " o " + cifLetras.charAt(posicion)); } } } }else{ return false; } } /** * Función que valida que tenga una letra y 8 dígitos * */ function esPatronCIF (cif) { var reg = new RegExp("^[A|B|C|D|E|F|G|H|J|K|L|M|N|P|Q|R|S|U|V|W]\\d{7}[\\d{1}|A|B|C|D|E|F|G|H|J|I]$", "i"); var resultado = cif.search(reg) if (resultado >= 0) return true; else return false; } function esPatronCIFsinDC (cif) { var reg = new RegExp("^[A|B|C|D|E|F|G|H|J|K|L|M|N|P|Q|R|S|U|V|W]\\d{7}$", "i"); var resultado = cif.search(reg) if (resultado >= 0) return true; else return false; } function esPatronNIF (nif) { var reg = new RegExp("^(\\d){1,8}\\D$", "i"); var resultado = nif.search(reg) if (resultado >= 0) return true; else return false; } function esPatronNIFsinLetra (nif) { var reg = new RegExp("^(\\d){1,8}$"); var resultado = nif.search(reg) if (resultado >= 0) return true; else return false; } function comprobarAltaNIE(nie){ var nieLetras='TRWAGMYFPDXBNJZSQVHLCKE'; var letra; var numeroNIE; if (nie) { nie = nie.toUpperCase(); if (esPatronAltaNIE(nie)) { numeroNIE = nie.substring(1, nie.length-1); letra = nie.charAt(nie.length-1); var pre = nie.substr(0, 1); var prev = '0'; if (pre == 'X') prev = '0'; else if (pre == 'Y') prev = '1'; else if (pre == 'Z') prev = '2'; numeroNIE = prev + numeroNIE; }else{ return false; } var d = (numeroNIE/23) d = Math.floor(d) d = d*23 var posicion = numeroNIE - d if (nieLetras.charAt(posicion) == letra) { return true; }else { return ("La letra de control debería ser: " + nieLetras.charAt(posicion)); } }//fin existe dni } function comprobarDNIFormulario(dni){ var dniLetras='TRWAGMYFPDXBNJZSQVHLCKE'; var letra; var numeroDNI; if (dni) { dni = dni.toUpperCase(); if (esPatronNIF(dni)) { numeroDNI = dni.substring(0, dni.length-1); letra = dni.charAt(dni.length-1); }else if (esPatronNIFsinLetra(dni)){ numeroDNI = dni.substring(0, dni.length); letra = ''; }else{ return false; } var d = (numeroDNI/23) d = Math.floor(d) d = d*23 var posicion = numeroDNI - d if (dniLetras.charAt(posicion) == letra) { return true; }else { return ("La letra de control del NIF debería ser: " + dniLetras.charAt(posicion)); } }//fin existe dni } /** * Función que valida que tenga "x" dígitos y acabe en letra * */ function esPatronAltaNIE (nif) { var reg = new RegExp("^[X|T|Y|Z](\\d){1,8}\\D$", "i"); var resultado = nif.search(reg) if (resultado >= 0) return true; else return false; } function esPatronAltaNIESinLetra (nif) { var reg = new RegExp("^[X|T|Y|Z](\\d){1,8}$", "i"); var resultado = nif.search(reg) if (resultado >= 0) return true; else return false; }