function Rellena_Ceros_I(cad, N)
{
var salida = String("");
cadena=cad.toString();
if (cadena.length < parseInt(N))
	 for (i=N; i>cadena.length; i--)
	 	salida=salida+"0";
return salida.concat(cadena);
}

function Calcula_NIF(COD)
	{
	var Dni, largo=8;
	var clave=new Array("T","R","W","A","G","M","Y","F","P","D","X","B"
			 ,"N","J","Z","S","Q","V","H","L","C","K","E");
	var dig=COD.substr(0,1).toUpperCase();
	if (!isNaN(dig))
		{
		Dni=COD;
		dig="";
		}
	else
		switch (dig) {
			case "K":
			case "L":
			case "M":
			case "X":
			case "Y": Dni=COD.substr(1,8);
				largo=7;
				break;
			default: Dni="ERROR";
			}
	if (isNaN(Dni))
		alert("El DNI debe tener el formato XNNNNNNN, siendo N un numero y X un numero o letra.");
	else
		{
		document.Calculo.DNI.value=dig+Rellena_Ceros_I(Dni,largo);
		document.Calculo.letra.value=clave[Dni%23];
		}
	document.Calculo.DNI.focus();
	}

function CompruebaDatos(elCIF) 
{
var resul = false;
var temp = elCIF.value.toUpperCase(); // pasar a mayúsculas

temp=temp.replace(/[ ,.-]/g,'');	//Eliminar caracteres inutiles
elCIF.value=temp;

if (!/^[A-Za-z0-9]{8,9}$/.test(temp))	// Son 9 dígitos? 
	alert ("Longitud incorrecta, debes introducir 8 o 9 dígitos");
else if (!/^[ABCDEFGHJKLMNPQRSUVW]/.test(temp)) // Es una letra de las admitidas ?
	alert("El primer dígito es incorrecto, debe ser una letra de las siguientes: A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,U,V,W");
    else 
	resul = true;
return resul;
}

function ValidaCIF(obj) 
{
var v1 = new Array(0,2,4,6,8,1,3,5,7,9); 
var letras =new Array('J','A','B','C','D','E','F','G','H','I','J');
var temp = 0; 
var valor=obj.value.toUpperCase();
var Tipo, Provincia, Digito;
if (!CompruebaDatos(obj))
	{
	obj.focus();
	obj.select();
	return;
	}
for(i=2; i<=6; i+=2) 
	{
	temp = temp + v1[ parseInt(valor.substr(i-1,1)) ];
	temp = temp + parseInt(valor.substr(i,1));
	}

temp=temp + v1[ parseInt(valor.substr(7,1)) ];
temp=(10 - ( temp % 10));

switch (valor.substr(0,1))
	{
 	case 'A': Tipo="Sociedad An&oacute;nima.";
		break;
	case 'B': Tipo="Sociedad de responsabilidad limitada.";
		break;
	case 'C': Tipo="Sociedad colectiva.";
		break;
	case 'D': Tipo="Sociedad comanditaria.";
		break;
 	case 'E': Tipo="Comunidad de bienes y herencias yacentes.";
		break;
	case 'F': Tipo="Sociedad cooperativa.";
		break;
	case 'G': Tipo="Asociaciones.";
		break;
	case 'H': Tipo="Comunidad de propietarios en r&eacute;gimen de propiedad horizontal.";
		break;
	case 'J': Tipo="Sociedades Civiles, con o sin personalidad jur&iacute;dica.";
		break;
	case 'K': Tipo="Espa&ntilde;oles menores de 14 a&ntilde;os.";
		break;
	case 'L': Tipo="Espa&ntilde;oles residentes en el extranjero sin DNI.";
		break;
	case 'M': Tipo="Extranjeros que no tienen NIE.";
		break;
	case 'N': Tipo="Entidades extranjeras.";
		break;
	case 'P': Tipo="Corporaci&oacute;n local.";
		break;
	case 'Q': Tipo="Organismo p&uacute;blicos.";
		break;
	case 'R': Tipo="Congregaciones e Instituciones Religiosas.";
		break;
	case 'S': Tipo="Organos de la Administraci&oacute;n del Estado y Comunidades Aut&oacute;nomas.";
		break;
	case 'U': Tipo="Uniones temporales de Empresas.";
		break;
	case 'V': Tipo="Otros tipos no definidos en el resto de claves.";
		break;
	case 'W': Tipo="Establecimientos permanentes de entidades no residentes en Espa&ntilde;a.";
		break;
	default: Tipo="No existente";
	}

switch (valor.substr(1,2))
	{
	case '01': Provincia='Alava';
		break;
	case '02': Provincia='Albacete';
		break;
	case '03':
	case '53':
	case '54': Provincia='Alicante';
		break;
	case '04': Provincia='Almería';
		break;
	case '05': Provincia='Ávila';
		break;
	case '06': Provincia='Badajoz';
		break;
	case '07':
	case '57': Provincia='Islas Baleares';
		break;
	case '08':
	case '58':
	case '59':
	case '60':
	case '61':
	case '62':
	case '63':
	case '64': Provincia='Barcelona';
		break;
	case '09': Provincia='Burgos';
		break;
	case '10': Provincia='Cáceres';
		break;
	case '11':
	case '72': Provincia='Cádiz';
		break;
	case '12': Provincia='Castellón';
		break;
	case '13': Provincia='Ciudad Real';
		break;
	case '14':
	case '56': Provincia='Córdoba';
		break;
	case '15':
	case '70': Provincia='A Coruña';
		break;
	case '16': Provincia='Cuenca';
		break;
	case '17':
	case '55': Provincia='Girona';
		break;
	case '18': Provincia='Granada';
		break;
	case '19': Provincia='Guadalajara';
		break;
	case '20':
	case '71': Provincia='Guipúzcoa';
		break;
	case '21': Provincia='Huelva';
		break;
	case '22': Provincia='Huesca';
		break;
	case '23': Provincia='Jaén';
		break;
	case '24': Provincia='León';
		break;
	case '25': Provincia='Lleida';
		break;
	case '26': Provincia='La Rioja';
		break;
	case '27': Provincia='Lugo';
		break;
	case '28':
	case '78':
	case '79':
	case '80':
	case '81':
	case '82':
	case '83':
	case '84': Provincia='Madrid';
		break;
	case '29':
	case '92':
	case '93': Provincia='Málaga';
		break;
	case '30':
	case '73': Provincia='Murcia';
		break;
	case '31': Provincia='Navarra';
		break;
	case '32': Provincia='Ourense';
		break;
	case '33':
	case '74': Provincia='Oviedo';
		break;
	case '34': Provincia='Palencia';
		break;
	case '35':
	case '76': Provincia='Las Palmas';
		break;
	case '36':
	case '94': Provincia='Pontevedra';
		break;
	case '37': Provincia='Salamanca';
		break;
	case '38':
	case '75': Provincia='Santa Cruz de Tenerife';
		break;
	case '39': Provincia='Cantabria';
		break;
	case '40': Provincia='Segovia';
		break;
	case '41':
	case '91': Provincia='Sevilla';
		break;
	case '42': Provincia='Soria';
		break;
	case '43':
	case '77': Provincia='Tarragona';
		break;
	case '44': Provincia='Teruel';
		break;
	case '45': Provincia='Toledo';
		break;
	case '46':
	case '96':
	case '97':
	case '98': Provincia='Valencia';
		break;
	case '47': Provincia='Valladolid';
		break;
	case '48':
	case '95': Provincia='Vizcaya';
		break;
	case '49': Provincia='Zamora';
		break;
	case '50':
	case '99': Provincia='Zaragoza';
		break;
	case '51': Provincia='Ceuta';
		break;
	case '52': Provincia='Melilla ';
		break;
	default: Provincia='Provincia Desconocida';
	}

switch (valor.substr(0,1))
	{
	case 'C':
	case 'K':
	case 'L':
	case 'M':
	case 'N':
	case 'P':
	case 'Q':
	case 'R':
	case 'S':
	case 'W': Digito=letras[temp];
		break;
	case 'A':
	case 'B':
	case 'D':
	case 'E':
	case 'F':
	case 'G':
	case 'H':
	case 'J':
	case 'U':
	case 'V': Digito=temp%10;
		break;
	default: Digito= letras[temp] + " ó " + temp%10;
	}
window.document.getElementById('Resultado').innerHTML="CIF : <b>" + valor.substr(0,8) + "-" + Digito + "</b><br>Tipo: <b> " + Tipo + "</b><br>Con sede (si es anterior a 2009) en: <b>" + Provincia + "</b><br>N&ordm; Secuencial: <b>" + valor.substr(3,5) + "</b><br>D&iacute;gito de Control: <b>" + Digito + "</b>";
obj.focus();
obj.select();
}
