Validar NIE y DNI en el mismo campo del formulario

Tengo un campo y quisiera que no enviara el formulario si el DNI o el NIE es incorrecto.
Tengo esto y no me sale:
<script>
function ValidaCampos(formulario) {
var expresion_regular_dni = /^\d{8}[a-zA-Z]$/; // 8 cifras numéricas más un carácter alfabético.
    if(expresion_regular_dni.test(formulario.dni.value)==false) {
        alert('El campo del DNI no es válido, debe tener 9 números y letra sin espacios');
    return false; // sale de la función y NO envía el formulario
}
</script>
<script type="text/javascript">
function nif(dni) {
numero = dni.substr(0,dni.length-1);
let = dni.substr(dni.length-1,1);
numero = numero % 23;
letra='TRWAGMYFPDXBNJZSQVHLCKET';
letra=letra.substring(numero,numero+1);
if (letra!=let)
else
var nie = this.toUpperCase();
    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';
    numero = prev + nie.substr(1,nie.length-1);
if (prev!=numero)
alert('DNI/NIE erroneo, vuelva a intentarlo');
else
alert('DNI/NIE CORRECTO !!, continue con el formulario');
else
}
</script>

1 respuesta

Respuesta
Te recomiendo hacer uso del siguiente código:
function nif(dni) {
numero = dni.substr(0,dni.length-1);
let = dni.substr(dni.length-1,1);
numero = numero % 23;
letra='TRWAGMYFPDXBNJZSQVHLCKET';
letra=letra.substring(numero,numero+1);
if (letra!=let)
alert('Dni erroneo');
}
Jaime.
Jaime,
El código que me das solo valida el D.N.I. (no el N.I.E.)
Yo lo que quiero es que el mismo campo me pueda validar cualquiera de las dos opciones.
Gracias
Ok, Te adjunto tres funciones individuales (cif, nie, nif)
Por temas de modularidad, te recomiendo meterlo en funciones individuales.
VALIDA CIF
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;
}
OK,
el código del NIE es este.
Ahora no veo la forma de meterlo para que en el mismo campo pueda ver las dos opciones (DNI y NIE) y si hay que hacer otro campo con el NIE... como se deja el DNI vacío si es obligatorio.
Te dejo un link para que veas el formulario online y el código fuente:
http://www.moneyclin.com/solicitud_internet_cliente2.htm
También te lo pego aquí:
<script>
function ValidaCampos(formulario) {
var expresion_regular_dni = /^\d{8}[a-zA-Z]$/; // 8 cifras numéricas más un carácter alfabético.
var expresion_regular_Telefono = /^\d{9}$/; // 9 cifras numéricas.
var expresion_regular_Correo = /^(.+\@.+\..+)$/;
var expresion_regular_banco = /^\d{4}$/; // 4 cifras numéricas.
var expresion_regular_sucursal = /^\d{4}$/; // 4 cifras numéricas.
var expresion_regular_dc = /^\d{2}$/; // 2 cifras numéricas.
var expresion_regular_cuenta = /^\d{10}$/; // 10 cifras numéricas.
if(expresion_regular_dni.test(formulario.dni.value)==false) {
alert('El campo del DNI no es válido, debe tener 9 números y letra sin espacios');
return false; // sale de la función y NO envía el formulario
}
if(expresion_regular_Telefono.test(formulario.Telefono.value)==false) {
alert('El campo del TELEFONO no es válido, debe tener 9 números y sin espacios');
return false; // sale de la función y NO envía el formulario
}
if(expresion_regular_Correo.test(formulario.Correo.value)==false) {
alert('La dirección de correo no es válida.');
return false; // sale de la función y NO envía el formulario
}
if(expresion_regular_banco.test(formulario.banco.value)==false) {
alert('BANCO no es válido, debe tener 4 números y sin espacios');
return false; // sale de la función y NO envía el formulario
}
if(expresion_regular_sucursal.test(formulario.sucursal.value)==false) {
alert('SUCURSAL no es válido, debe tener 4 números y sin espacios');
return false; // sale de la función y NO envía el formulario
}
if(expresion_regular_dc.test(formulario.dc.value)==false) {
alert('DC no es válido, debe tener 2 números y sin espacios');
return false; // sale de la función y NO envía el formulario
}
if(expresion_regular_oficina.test(formulario.oficina.value)==false) {
alert('CUENTA no es válido, debe tener 10 números y sin espacios');
return false; // sale de la función y NO envía el formulario
}
alert('Gracias por rellenar nuestro formulario correctamente.');
return true; // sale de la función y SÍ envía el formulario
}
</script>
<script type="text/javascript">
function nif(dni) {
numero = dni.substr(0,dni.length-1);
let = dni.substr(dni.length-1,1);
numero = numero % 23;
letra='TRWAGMYFPDXBNJZSQVHLCKET';
letra=letra.substring(numero,numero+1);
if (letra!=let)
alert('Dni erroneo');
}
</script>
<SCRIPT LANGUAGE="Javascript" TYPE="text/javascript">
<!-- Esconde el codigo a navegadores antiguos
function numerico(valor){
cad = valor.toString();
for (var i=0; i<cad.length; i++) {
var caracter = cad.charAt(i);
if (caracter<"0" || caracter>"9")
return false;
}
return true;
}
function obtenerDigito(valor){
valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
control = 0;
for (i=0; i<=9; i++)
control += parseInt(valor.charAt(i)) * valores;
control = 11 - (control % 11);
if (control == 11) control = 0;
else if (control == 10) control = 1;
return control;
}
function validar(f) {
if (f.banco.value == "" || f.sucursal.value == "" ||
f.dc.value == "" || f.cuenta.value == "")
alert("Por favor, introduzca los datos de su cuenta");
else {
if (f.banco.value.length != 4 || f.sucursal.value.length != 4 ||
f.dc.value.length != 2 || f.cuenta.value.length != 10)
alert("Por favor, introduzca correctamente los datos de su cuenta; no están completos");
else {
if (!numerico(f.banco.value) || !numerico(f.sucursal.value) ||
!numerico(f.dc.value) || !numerico(f.cuenta.value))
alert("Por favor, introduzca correctamente los datos de su cuenta; no son numericos");
else {
if (!(obtenerDigito("00" + f.banco.value + f.sucursal.value) == parseInt(f.dc.value.charAt(0))) ||
!(obtenerDigito(f.cuenta.value) == parseInt(f.dc.value.charAt(1))) )
alert("Los dígitos de control no se corresponden con los demás números de la cuenta");
else
alert ("CCC correcto");
}
}
}
}
// -->
</SCRIPT>
Gracias por tu ayuda!
Lo siento, pero no tengo tiempo para analizar el código ajeno (llevaría muchísimo tiempo). Por favor, plantea una pregunta concreta y procuraré asesorarte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas