//http://compartecodigo.com/javascript/validar-nif-cif-nie-segun-ley-vigente-31.html
//Muy buena función, sin embargo solo me funcionaba en FF y no en IE.
//(por este motivo, me he buscado esta otra versión:
// https://www.alcobendas.org/ae_abs/empleo/castellano/Tramites/28C616F4FF4A47A4821FF7D40FC79719.asp


var IdentificacionEspana =
{

f_b_esCif:
	function
		(
		s_cif
		)
	{	
	var o_patron = /[0-9]/;
	return s_cif.match(o_patron);
	//return IdentificacionEspana.validaCif(s_cif);		
	},		

validaNif:
	function 
		(
		sNumero
		)
	{
	sNumero = sNumero.toUpperCase(); // pasar a mayúsculas
	if (!/^[A-Za-z0-9]{9}$/.test(sNumero))  // Son 9 dígitos?
		{
		return false;
		}//if
	if (/^[0-9]{8}[ABCDEFGHJKLMNPQRSTVWXYZ]$/.test(sNumero))
		{
		return IdentificacionEspana.ValidaDcNif(sNumero);
		}//if
	if (/^X[0-9]{7}[ABCDEFGHJKLMNPQRSTVWXYZ]$/.test(sNumero))
		{
		return IdentificacionEspana.ValidaDcNif(sNumero.substring(1));
		}//if
	return false;
	},

validaCif:
	function 
		(
		sNumero
		)
	{
	sNumero = sNumero.toUpperCase(); // pasar a mayúsculas
	if (!/^[A-Za-z0-9]{9}$/.test(sNumero))  // Son 9 dígitos?
		{
		return false;
		}//if
	if (/^[ABCDEFGHKLMNPQS][0-9]{7}[0-9ABCDEFGHIJ]$/.test(sNumero))
		{
		return IdentificacionEspana.ValidaDcCif(sNumero);
		}//if
	return false;
	},
	
ValidaDcNif:
	function 
		(
		sNumero
		)
	{
	var letras = 'TRWAGMYFPDXBNJZSQVHLCKE';
	var n = sNumero.length;
	var numero = sNumero.substring(0, n - 1) % 23;
	return sNumero.substring(n - 1, n) == letras.substring(numero, numero + 1);
	},
	
ValidaDcCif:
	function 
		(
		sNumero
		)
	{
	var sumaDigitosPares = 0;
	var sumaDigitosImpares = 0;
	var numero;
	var arrayNumero;
	var digitoControl;
	//Suma los dígitos pares de la cadena resultante de quitar el primer y último caracter del CIF
	for (i = 2; i < sNumero.length - 1; i = i + 2)
		{
		sumaDigitosPares = sumaDigitosPares + parseInt(sNumero.charAt(i));
		}//for
	//Multiplicar por 2 los dígitos impares de la cadena resultante de quitar el primer y último caracter del CIF
	//y con cada resultado, sumar sus dígitos.
	//Sumarlo todo
	for (i = 1; i < sNumero.length - 1; i = i + 2)
		{
		numero = sNumero.charAt(i) * 2;
		if (numero > 9)
			{
			numero = (numero % 10) + 1
			}//if
		sumaDigitosImpares = sumaDigitosImpares + numero;
		}//for
	//Sumar la suma de dígitos pares y la de dígitos impares
	//Coger la última cifra del número obtenido y restarle 10
	numero = sumaDigitosPares + sumaDigitosImpares
	for (i = numero; i >= 0; i = i - 10)
		{
		numero = i;
		}//for
	digitoControl = 10 - numero;
	letraControl = String.fromCharCode(digitoControl + 64);
	if (digitoControl == 10)
		{
		digitoControl = 0;
		}//if
	//Comprueba si el dígito de control se corresponde correctamente
	if (digitoControl.toString() == sNumero.charAt(8) || letraControl.toString() == sNumero.charAt(8))
		{
		return true;
		}//if
	return false;
	}
		
};
