Calculo de NIE en JavaScript
Agradecería si alguien me puede ayudar con la actualización de la siguiente programación para adaptarla a la normativa actual y que realice la correcta actualización de documentos. Gracias de antemano.
//ADECUAR EL FORMATO
function adecuar_formato_DNI_NIE(documento)
{
var identificacion; /*Variable que contiene el documento en minusculas*/
var longitud;
var patronnumerico = /[0-9]/gi;
var patronalfabetico = /[a-z]/gi;
var patronNIE = /[x]/gi;
var contador = 0;
var literal;
var literalauxiliar;
var resultado;
var elementos="";
var largo
//Paso a mayusculas y calculo la longitud
identificacion=documento.toUpperCase();
longitud=identificacion.length;
//Si la longitud es mayor de 12 el documento esta mal porque se va del tamaño en la BD
if (longitud > 12) alert("Error en el documento");
else
{
while (contador<longitud)
{
//cojo el ultimo elemento que tiene que ser la letra
if(contador==longitud-1)
{
literal=identificacion.substr(contador,1);
contador++;
resultado=literal.match(patronalfabetico);
if(resultado != null)
{
elementos=elementos+literal;
}
}
else
{
//si estamos en el primer elemento
if(contador==0)
{
literal=identificacion.substr(contador,1);
contador++;
resultado=literal.match(patronNIE);
//si es una x es que va a ser un NIE y lo guardo o si es un numero va a ser un DNI y lo guardo
if(resultado != null)
{
elementos=elementos+literal;
}
else
{
resultado=literal.match(patronnumerico);
if(resultado != null)
{
elementos=elementos+literal;
}
}
}
//para los restantes elementos compruebo si son numeros
else
{
literal=identificacion.substr(contador,1);
contador++;
resultado=literal.match(patronnumerico);
if(resultado != null)
{
elementos=elementos+literal;
}
}
}
}
//devuelvo los elementos
return elementos;
}
}
//CALCULAR EL NIF
function calcular_NIF(documento,elementoformulario)
{
var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
var letraresultado;
var cifras;
longitud=documento.length;
cifras=documento;
var numero = cifras%23;
letraresultado = letras.substring(numero,numero+1);
return letraresultado;
}
//COMPROBAR SI EL NIF ES CORRECTO
function comprobar_NIF(cifras,letra)
{
var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
var numero = cifras%23;
var letraresultado;
var correcto=true;
letraresultado = letras.substring(numero,numero+1);
if (letraresultado!=letra)
{
correcto=false;
}
return correcto;
}
//COMPROBAR EL DOCUMENTO
function chequear_DNI_NIE(documento,tipodocumento,formularioelemento)
{
var resultado;
var documento;
var longitud;
var correcto;
var numeros;
var letra;
var patronDniSinCero=/^[1-9]{1}[0-9]{6}[a-z]{1}$/i;
var patronDni=/^[0-9]{8}[a-z]{1}$/i;
var patronNie=/^x[0-9]{7}[a-z]{1}$/i;
//doy formato al documento
//documento=adecuar_formato_DNI_NIE(documento);
//ya lo hago en la comprobacion
//calculo la longitud del documento
longitud=documento.length;
//dependiendo del tipo de documento del que se trate
//si es DNI
if (tipodocumento=="DNI")
{
switch(longitud)
{
case 8:
resultado=documento.match(patronDniSinCero);
if(resultado != null)
{
//cojo los numeros por un lado y la letra por otro
numeros=documento.substr(0,7);
letra=documento.substr(7,1);
correcto=comprobar_NIF(numeros,letra);
if (correcto == true)
{
formularioelemento.value=0+numeros+letra;
return true;
}
else
{
var guardar = confirm ("La letra del NIF es incorrecta ¿Quieres calcular la letra para el documento que has introducido?");
if (guardar==true)
{
var letraNIF=calcular_NIF(numeros);
formularioelemento.value=0+numeros+letraNIF;
return true;
}
else
{
formularioelemento.focus();
return false;
}
}//del else
}
else
{
alert("Error en el documento");
return false;
}
break;
case 9:
resultado=documento.match(patronDni);
if(resultado != null)
{
//cojo los numeros por un lado y la letra por otro
numeros=documento.substr(0,8);
letra=documento.substr(8,1);
correcto=comprobar_NIF(numeros,letra);
if (correcto == true)
{
return true;
}
else
{
var guardar = confirm ("La letra del NIF es incorrecta ¿Quieres calcular la letra para el documento que has introducido?");
if (guardar==true)
{
var letraNIF=calcular_NIF(numeros);
//alert(letraNIF);
formularioelemento.value=numeros+letraNIF;
return true;
}
else
{
formularioelemento.focus();
return false;
}
}
}
else
{
alert("Error en el documento");
return false;
}
break;
default:
{
alert("Error en el documento");
return false;
}
}//del switch
}
if (tipodocumento=="NIE")
{
resultado=documento.match(patronNie);
if(resultado != null)
{
numeros=documento.substr(1,7);
letra=documento.substr(8,1);
correcto=comprobar_NIF(numeros,letra);
if (correcto == true)
{
return true;
}
else
{
var guardar = confirm ("La letra del NIF es incorrecta ¿Quieres calcular la letra para el documento que has introducido?");
if (guardar==true)
{
var letraNIF=calcular_NIF(numeros);
formularioelemento.value='X'+numeros+letraNIF;
return true;
}
else
{
formularioelemento.focus();
return false;
}
}
}
else
{
alert("Error en el documento");
return false;
}
}
}
function chequear_Pasaporte(documento)
{
var patron = /^w{0,12}$/gi;
var resultado;
var correcto=false;
resultado=documento.match(patron);
if(resultado != null)
{
correcto=true;
}
else
{
correcto=false;
alert("Error en el documento");
}
return correcto;
}