﻿// Archivo JScript
function NifNieValido(source, arguments)
{
    abc = arguments.Value;
    abc = LimpiarCadena(abc);
    dni=abc.substring(0,abc.length-1);
    let=abc.charAt(abc.length-1);
    if (!isNaN(let))
    {
        arguments.IsValid=false;
        return; 
    }
    else
    {
        //mod de Marcos para que acepte el NIE:
        //el NIE es como el DNI pero con una letra
        //al principio, que será una X, Y o Z
        //entonces se la quito
        if (!isNumEntero(dni.substring(0,1)))
        {
            dni = dni.replace(dni.substring(0,1),'');
        }
        cadena = "TRWAGMYFPDXBNJZSQVHLCKET";
        posicion = dni % 23;
        letra = cadena.substring(posicion,posicion+1);
        if (letra!=let.toUpperCase())
        {
            arguments.IsValid=false;
            return; 
        }
    }
    arguments.IsValid=true;
}


function CifValido(source,arguments)
{
    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 = arguments.Value;
    
    texto = LimpiarCadena(texto);
        
    texto = texto.toUpperCase();
     
    var regular = new RegExp(/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g);
     if (!regular.exec(texto))
     {
        arguments.IsValid=false;
        return; 
     }
         
     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]))
     {
        arguments.IsValid=true;
        return; 
     }
     else
     {
        arguments.IsValid=false;
        return; 
     }
}

function reemplazar(texto,s1,s2)
{
	return texto.split(s1).join(s2);
}

function LimpiarCadena (cad)
{
    cadena = cad;
    
    cadena = reemplazar(cadena,' ','');
    cadena = reemplazar(cadena,'-','');
    cadena = reemplazar(cadena,'.','');
    
    return cadena;
}

function NifOCifValido(source, arguments)
{
    NifNieValido(source, arguments);
    if (!arguments.IsValid)
    {
        CifValido(source, arguments)
    }      
}

function isNumEntero(q) 
{
    for ( i = 0; i < q.length; i++ ) 
    {
        valor = parseInt(q.charAt(i)); // me permite convertir letra por letra en numero y si no es un numero entonces no devuelve nada
        if (isNaN(valor)) 
        {
            return false;
        }
    }
    return true;
}



