
//____VALIDAR NIF___________________________________________________________
function Nif_Val (cadena)
{
        var nif = "", ultimoCaracter = "", parteNumerica = "";
	var cCtrl = 0, longitud = 0, i = 0;
        Tab = new Array ('A','T','R','W','A','G','M','Y','F','P','D','X','B','N','J','Z','S','Q','V','H','L','C','K','E');
	nifTab = new Array (cadena.length);


	for (i=0;i<cadena.length;i++) {
		nifTab[i] = cadena.charAt(i);	
	}
        longitud = cadena.length;


        if ( (longitud == 0) || (longitud > 9) )
                return (1);


        if ( longitud < 9 )     {
                for ( i=0; i < 9-longitud; i++ ) {
			nif = nif + "0";
                }
                nif = nif + cadena;
        }
        else
                nif = cadena;


        for (i = 0; i < (cadena.length)-1; i++) {
                parteNumerica = parteNumerica + nifTab [i];
        }
	if ( CadenaNumerica_Var(parteNumerica) ) {
		return (1);
	}


	cCtrl = Tab[(parteNumerica%23)+1];
	ultimoCaracter = nifTab [(cadena.length)-1];
	ultimoCaracter = ultimoCaracter.toUpperCase();
	if (cCtrl == ultimoCaracter)
		return (0);
	else
		return (1);
}

function validaNif(Nif,letra)
{
 
  var resultado = true;
  var aux = Nif.value+letra.value.toUpperCase();
  if (aux != "")
  {
    if ( aux.length < 9 ) {
       var nceros = 9 - (aux.length);
       var ceros='';
       for ( i = 1; i<=nceros; i++) ceros = ceros +'0';
       aux = ceros + aux;
    }  
    var letra = aux.charAt(aux.length);
    var vnif = aux.substring(0, 8);
    var cadena = 'TRWAGMYFPDXBNJZSQVHLCKET';
    var posicion = vnif % 23;
    var vletra;
 
    vletra=cadena.charAt(posicion); 
    if (vletra != aux.charAt(8))
    {
      Nif.focus();
      Nif.select();
      resultado = false;
    }
    else
    {
      resultado = true;
    }
  }
  return resultado;             
}

//____VALIDAR CIF___________________________________________________________
// Comprueba la entrada de datos
function ValidaCif(num, letra) 
{
	// pasar a mayúsculas
	var temp = letra.value.toUpperCase();
	var temp1 = letra.value.toUpperCase()+num.value;
	//alert ("El CIF es: "+temp1);
	
	if (!/^[A-Za-z0-9]{9}$/.test(temp1)) // Son 9 dígitos?
	{
		alert ("Longitud incorrecta, un CIF consta de 9 dígitos");
		return false;
	}
	else if (!/^[JABCDEFGHI]/.test(temp)) 
	{
		// Es una    letra de las admitidas ?
		alert("El primer dígito es  incorrecto, debe ser una letra de las siguientes: J,A,B,C,D,E,F,G,H,I");
		return false;
	}
	else
	{
		var v1 = new Array(0,2,4,6,8,1,3,5,7,9);
		var v2 = new Array('J','A','B','C','D','E','F','G','H','I'); 
		var temp = 0;
		
		for( i = 2; i <= 6; i += 2 ) 
		{
			temp = temp + v1[ parseInt(temp1.substr(i-1,1))];
			temp = temp + parseInt(temp1.substr(i,1));
		};
		
		temp = temp + v1[ parseInt(temp1.substr(7,1))];
		temp = (10 - ( temp % 10));
		
		alert("TEMP: "+temp);
		
		if( temp == 10 )
		{
			if (letra.value.toUpperCase() != v2[0])
			{
				alert("La letra no coincide con el número");
				return false;
			}
		}
		else
		{
			if (letra.value.toUpperCase() != v2[temp])
			{
				alert("La letra no coincide con el número");
				return false;
			}
		}
		
		return true;
	}
}

function validarCIF(num, letra){ 
         
        var texto = num.value+letra.value.toUpperCase();
        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 = texto.toUpperCase(); 
         
        var regular = new RegExp(/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[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; 

}

// Esta función es llamada en la siguiente
function CadenaNumerica_Var(cadena)
{
        var i, long_cad=cadena.length;
        for ( i=0; i < parseInt(long_cad,10); i++ ) {
                if ( (cadena.substring(i,i+1) < "0") || (cadena.substring(i,i+1) > "9") ) {
                        return (1);
                }
        }
	return (0);
}

function Cif_Val(num,letra)
{
 var CIFEntrada = letra.value.toUpperCase()+num.value;
 var cif="";			 
 var PrimerCaracter="";   	
 var parte_numerica=""; 	 
 var parte_UltimaLetra="";
 var longitud=0;

 var esLetraAH, esLetraAJ, esLetraPQ, esS;
 var esNumero, i;
 var R1, R21, R22, R23, R24, R2, R;
 var tabla2="JABCDEFGHI";
 var tabla3="0246813579";

 longitud=CIFEntrada.length;

 if (longitud!=9)
    alert ("Longitud incorrecta, un CIF consta de 9 dígitos");

        cif=letra.value.toUpperCase()+num.value;

        // Saco el último caracter de la cadena
        UltimaLetra=cif.charAt(8);

        // Saco el primer caracter de la cadena
        PrimerCaracter=cif.charAt(0);
        if(PrimerCaracter.toUpperCase()>='A' && PrimerCaracter.toUpperCase()<='H')
            	esLetraAH=true;
	else
		esLetraAH=false;

	if(PrimerCaracter.toUpperCase()=='S')
		esS=true;
	else
		esS=false;

	if(PrimerCaracter.toUpperCase()>='P' && PrimerCaracter.toUpperCase()<='Q')
		esLetraPQ=true;
	else
		esLetraPQ=false;
        
	if(UltimaLetra.toUpperCase()>='0' && UltimaLetra.toUpperCase()<='9')
		esNumero=true;
	else 
		esNumero=false;

        if ( !(esLetraAH || esS || esLetraPQ) )
        {
        	alert("La letra es incorrecta, debe ser una de las siguientes: J,A,B,C,D,E,F,G,H,I");
                return false;
	}

	parte_numerica=cif.substring(1,cif.length-1);
        if (CadenaNumerica_Var(parte_numerica)!=0)
        {
                alert("Debe de ser una cadena numérica - " + parte_numerica);
                return false;
	}

	R1=((parte_numerica.charAt(1))*1)+((parte_numerica.charAt(3))*1)+((parte_numerica.charAt(5))*1);
        R21=tabla3.charAt(parte_numerica.charAt(0))*1;
        R22=tabla3.charAt(parte_numerica.charAt(2))*1;
        R23=tabla3.charAt(parte_numerica.charAt(4))*1;
        R24=tabla3.charAt(parte_numerica.charAt(6))*1;
        R2=R21+R22+R23+R24;
        R=R1+R2;
        R=R%10;
        R=10-R;

        if(R==10)
            R=0;

        if ( esLetraAH && esNumero )
        {
                if ( (UltimaLetra)==R )
                        return true;
                else
                {
                        alert("La letra no se corresponde con el número escrito");
                        return false;
		}
        }

        if (UltimaLetra==tabla2.charAt(R))
                return true;
        else
        {
        	alert("La letra no se corresponde con el número escrito");
        	return false;
        }
}


//____VALIDAR NUMEROS___________________________________________________________

function validaNumero(campo, enteros, decimales)
{
  valor2 = campo.value;

  if (valor2 == "") return true;
  else
  {
    do
    {
      valor = valor2;
      valor2 = valor.replace(".", "");
    }        
    while (valor != valor2);
  
    expresion = "[0-9]{1," + enteros + "}";
    if (decimales > 0) expresion += "(,[0-9]{1," + decimales + "}){0,1}";
  
    matchStr = new RegExp(expresion).exec(valor);
    
    if (matchStr == null) 
    {
      return false;
    }
    else return (valor == matchStr[0]);
  }
}

//______________________________________________________________________

  function validaNumeroJusto(campo, longitud)
  {

    valor = campo.value;
    if (valor == "")
      return true;
    else
    {          
      expresion="[0-9]{" + longitud + "}";  
          
      matchStr = new RegExp(expresion).exec(valor);
      
      if (matchStr == null)  
      {
        campo.focus();
        campo.select();
        alert('El valor introducido no es correcto(menos de ' + longitud + ' caracteres o no numérico)');
        return false;
      } 
      else 
      {
        return (valor == matchStr[0]);
      }
    }
  }

//____________________________________________________________________

function borraCaracter(valor, caracter)
{
  aValor = valor.split("");
  fin = "";
  alfin="";
  
  for (i=0; i < aValor.length; i++){
    if (aValor[i] == caracter){
//alert("valor: "+aValor[i]);
      alfin = completaArray(aValor, fin, i);      
      break;
    }
    else{
      fin += aValor[i];
      alfin += aValor[i];
//alert("fin: "+fin);
    }
  }
  return alfin;
}


function completaArray(aValor, fin, i){

    for (x=i; x < aValor.length-1; x++){
      fin += aValor[x+1];
/*
alert("for x:"+aValor[x]);
alert("for x+1:"+aValor[x+1]);
aux = aValor[x+1];
aValor[x] = aux;
*/        
    }
    return fin;
}

function validaNumeroFoco(campo, enteros, decimales)
{
  retorno = true;

  valor2 = campo.value;

/* 
aux = new RegExp("\.");
alor2 = alor.replace(aux, "x");
*/

  if (valor2 == "") return true;
  else
  {
    do
    {
      valor = valor2;
      
// Se sustituye la función replace por una hecha a mano: borraCaracter.
// Motivo: netscape quiere como primer a argumento una expresión regular y no una cadena.
//         Dado que lo que se pretende sustituir es un punto (.) se opta por esta solución.
//      
      
      valor2 = borraCaracter(valor, '.');
      //valor2=valor.replace(".","");      
    }        
    while (valor != valor2);
  
    expresion = "[0-9]{1," + enteros + "}";
    if (decimales > 0) expresion += "(,[0-9]{1," + decimales + "}){0,1}";
  
    //matchStr = new RegExp(expresion).exec(valor);
    
    aux = new RegExp(expresion);
    matchStr = aux.exec(valor);

    if (matchStr == null) 
    {
      retorno = false;
    }
    else retorno = (valor == matchStr[0]);

    if (!retorno)
    {
      campo.focus();
      campo.select();
      alert('Formato incorrecto.\nCompruebe que todos los caracteres son numéricos y que lo ha escrito sin espacios');
    }
    
    return retorno;
  }
}

//____VALIDAR E-MAIL______________________________________________________________

/*
function validaEmail(emailAddress)
{
  var result =true;    
  if (emailAddress.value != "")
  {  
    if (emailAddress.value.indexOf ('@',0) == -1 || emailAddress.value.indexOf ('.',0) == -1)
    {
      emailAddress.focus();
      emailAddress.select();
      result = false;
    }
  }
  return result;
}

*/




//UN EJEMPLO UN POCO MAS COMPLEJO
<!-- Begin
function validaEmail(emailStr)
{
var emailStr = emailStr.value;
var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
var validChars="\[^\\s" + specialChars + "\]"
var firstChars=validChars
var quotedUser="(\"[^\"]*\")"
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom="(" + firstChars + validChars + "*" + ")"
var word="(" + atom + "|" + quotedUser + ")"
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
var matchArray=emailStr.match(emailPat)

if (matchArray==null) {
	alert("Email incorrecto (verifique la @ y los .)")
	return false
}

var user=matchArray[1]
var domain=matchArray[2]
if (user.match(userPat)==null) {
    //pp="El nombre de usuario no es correcto.";
    alert("Email incorrecto")
    return false
}

var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        //alert("Email incorrecto: El nombre o dominio no es correcto")
	        alert("Email incorrecto")

		return false
	    }
    }
    return true
}

var domainArray=domain.match(domainPat)
if (domainArray==null) {
	alert("Faltan datos en el nombre detras de la @")
    return false
}

var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>5) {
   alert("Nombre incorrecto max. 5 letras detras del .")
   return false
}




if (domArr[domArr.length-1].length==3 && len<2) {
   var errStr="Se olvido la terminación detras del ."
   alert(errStr)
   return false
}

return true;
}




//____VALIDAR REQUERIDO______________________________________________________________

function validaRequerido(campo)
{
    var valor = campo.value;
    var vacio = true;

    for (i=0; i < valor.length; i++)
    {
      if (valor.charAt(i) != " ")
      {
        vacio = false;
      }
    }               

    if(valor == "" || vacio == true)
    {
      return false;
    }
    else
      return true;
}

function validacheckRequerido(campo)
{
  if (!campo.checked) return false;
  else 	return true;
}

function validaComboRequerido(combo, textoError)
{
  var seleccionado = combo.selectedIndex;
  if (combo.options[seleccionado].text=='')
  {
    alert(textoError);
    combo.focus();
    return false;
  }
  
  return true;
}

function validaNumeroRequerido(numero, enteros, decimales, textoError)
{
  if (!validaRequerido(numero))
  {
    alert(textoError);
    numero.focus();
    return false;
  }
  else
  {
    if (!validaNumeroFoco(numero, enteros, decimales)) return false;
  }
  
  return true;
}

//____VALIDAR TEXTAREA______________________________________________________________



function validaTextArea(campoTextArea, longitud)
{
	
  var textArea = campoTextArea.value;

  if (textArea == '')
  {
    textAreaOk = true;
  }
  else
  {
    if (textArea.length<= longitud) textAreaOk = true;  
    else textAreaOk = false;
  }
  
  if (!textAreaOk)
  {
    campoTextArea.select();
    //campoTextArea.focus();
    alert('Texto introducido demasiado largo');
  }
return textAreaOk;
}



//____VALIDAR DÍGITOS DE CONTROL DE NÚMERO DE CUENTA__________________________________

function validaDc(entidad, oficina, dc, numeroCuenta)
{
  var entidadOficina = entidad.value + oficina.value;
  var suma1 = 0;
  var suma2 = 0;
  var pesos = new Array();
  var i;

  pesos[0] = 10; // longitud

  pesos[1] = 6;
  pesos[2] = 3;
  pesos[3] = 7;
  pesos[4] = 9;
  pesos[5] = 10;
  pesos[6] = 5;
  pesos[7] = 8;
  pesos[8] = 4;
  pesos[9] = 2;
  pesos[10] = 1;

  if (entidad.value.length != 0 || oficina.value.length != 0 || dc.value.length != 0 || numeroCuenta.value.length != 0)
  {
    if (entidad.value.length != 4 || oficina.value.length != 4 || dc.value.length != 2 || numeroCuenta.value.length != 10)
    {
        return false;
    }
    else
    {
      for (i = entidadOficina.length; i>0; i--)
      {
        suma1 += (entidadOficina.charAt(i-1) * pesos[entidadOficina.length - i + 1]);
      }

      for (i = numeroCuenta.value.length; i > 0; i--)

      {
        suma2 += (numeroCuenta.value.charAt(i-1) * pesos[numeroCuenta.value.length - i + 1]);
      }

      suma1 = 11 - (suma1 % 11);
      suma2 = 11 - (suma2 % 11);

      switch(suma1)
      {
        case 10 : 
          suma1 = 1;
          break;
        case 11 : 
          suma1 = 0;
          break;
      }

      switch(suma2)
      {
        case 10 : 
          suma2 = 1;
          break;
        case 11 : 
          suma2 = 0;
          break;
      }
      
      if (dc.value != ((suma1*10) + suma2))
      {
        return false;
      }
      else
      {
        return true;
      }                  
    }
  }
  else
  {
      return true;
  }
}

function validaDcVariables(entidad, oficina, dc, numeroCuenta)
{
  var entidadOficina = entidad + oficina;
  var suma1 = 0;
  var suma2 = 0;
  var pesos = new Array();
  var i;

  pesos[0] = 10; // longitud

  pesos[1] = 6;
  pesos[2] = 3;
  pesos[3] = 7;
  pesos[4] = 9;
  pesos[5] = 10;
  pesos[6] = 5;
  pesos[7] = 8;
  pesos[8] = 4;
  pesos[9] = 2;
  pesos[10] = 1;

  if (entidad.length != 0 || oficina.length != 0 || dc.length != 0 || numeroCuenta.length != 0)
  {
    if (entidad.length != 4 || oficina.length != 4 || dc.length != 2 || numeroCuenta.length != 10)
    {
        return false;
    }
    else
    {
      for (i = entidadOficina.length; i>0; i--)
      {
        suma1 += (entidadOficina.charAt(i-1) * pesos[entidadOficina.length - i + 1]);
      }

      for (i = numeroCuenta.length; i > 0; i--)

      {
        suma2 += (numeroCuenta.charAt(i-1) * pesos[numeroCuenta.length - i + 1]);
      }

      suma1 = 11 - (suma1 % 11);
      suma2 = 11 - (suma2 % 11);

      switch(suma1)
      {
        case 10 : 
          suma1 = 1;
          break;
        case 11 : 
          suma1 = 0;
          break;
      }

      switch(suma2)
      {
        case 10 : 
          suma2 = 1;
          break;
        case 11 : 
          suma2 = 0;
          break;
      }
      
      if (dc != ((suma1*10) + suma2))
      {
        return false;
      }
      else
      {
        return true;
      }                  
    }
  }
  else
  {
      return true;
  }
}
