function validar_formulario() {
	var res=validardni(document.admin.nif.value);
	if (!res) {
		alert("DNI o Pasaporte no válido");
		document.admin.nif.focus();
	} else {
		document.admin.nif.value=res;
	}
}


function validardni(dni)
{
	//quitar espacios (trim)
	abc=trim(dni);
	caracter_1=abc.substring(0,1); // cogemos 1 caracter
    
	// caso en que empiece por letra distinta de X
	if (isNaN(caracter_1) && (caracter_1 != "X") && (caracter_1 != 'x'))
	{
			return false;
	}
	else
	{	
		// se trata de un pasaporte
		if ((caracter_1 == 'X') || (caracter_1 == 'x'))
		{
			if (((abc.length-1) >6) && ((abc.length-1)<9))
			{
				for (i=1;i<abc.length-1;i++)
				{
					num=abc.substr(i,1) ;//cogemos desde el 2º hasta el final menos uno (numeros)
					if (isNaN(num))
					{
						return false;
					}
				}
				letra=abc.substr(8,1);
				// comprobar último caracter sea letra
				if ((isNaN(letra)) || (letra=="")) // es una letra o vacio
				{
					return montadni(abc,1);
				}
				else
				{
					return false;
				}
			}
			else
			{
				return false;
			}
		}
		else
		// se trata de un dni normal
		{
			dni=abc.substring(0,abc.length-1)  //substrae cadena de solo numeros
			if (((abc.length-1) >6) && ((abc.length-1)<9))
			{
				for (i=0;i<abc.length-1;i++)
				{
					num=abc.substr(i,1) //cogemos desde el 2º hasta el final menos uno (numeros)
					if (isNaN(num))
					{
						return false
					}				
				}
				letra=abc.substr(8,1);	// comprobar último caracter sea letra
				if ((isNaN(letra)) || (letra=="")) // es una letra o vacio
				{
					return montadni(abc,2);
				}
				else
				{
					return false
				}
			}
			else
			{
				return false
			}	
		}
	}
}
									
function dnivalido(cadena_entera,tipo)
{
	cadena="TRWAGMYFPDXBNJZSQVHLCKET";
	posicion = cad % 23;
	let = cadena.substring(posicion,posicion+1);
	if(tipo==1)
	{
		var nif = "X" +cadena_entera + let;
	}
	if (tipo ==2)
	{
		var nif = cadena_entera + let;
	}
	return nif;
}

function montadni(abc,tipo)
{
	if (tipo ==1)
	{
		if (abc.substr(8,1)=="")
		{
			cad=abc.substring(1,abc.length);
			var a = dnivalido(cad,tipo);
		}
		else
		{
			cad=abc.substring(1,abc.length-1);
			var a = dnivalido(cad,tipo);
		}
	}
	if (tipo ==2)
	{
		if (abc.substr(8,1)=="")
		{
			cad=abc.substring(0,abc.length);
			var a = dnivalido(cad,tipo);
		}
		else
		{
			cad=abc.substring(0,abc.length-1);
			var a = dnivalido(cad,tipo);
		}
	}
	return a;
}
