/*
Javascript para comprobar la validez de
un CIF en España (incluso para sociedades)
*/	
function CIFCorrecto(valorcif)
{
    //Comprueba que tenga 9 dígitos, el primero debe ser una letra y el resto números
  
    if (!/^([A-Z]\d{8})|([PX]\d{7}[A-J])$/.test(valorcif.toUpperCase()))
    {
		return false;
    }

    //Comprueba que la letra sea una de las posibles
    if (!/^[ABCDEFGHKLMPQSX]/.test(valorcif.toUpperCase()))
    {
		return false;
	}

	//Comprueba el dígito de control del CIF
	return ComprobarDigitoControlCIF(valorcif);
}

/*
La siguiente función se encarga de validar el dígito de control
*/
function ComprobarDigitoControlCIF(valorcif)
{
    var arrayCIF
    var sumaDigitosPares = 0;
    var sumaDigitosImpares = 0;
    var numero;
    var arrayNumero;
    var digitoControl;
    
    //mete el cif en un array
	arrayCIF = valorcif.split("");
	
	//Si no tiene 9 caracteres es incorrecto
	if (arrayCIF.length != 9)
	{
		return false;
	}
	
	//Suma los dígitos pares de la cadena resultante de quitar el primer y último caracter del CIF
	for(i = 2; i < arrayCIF.length - 1; i = i + 2)
	{
		sumaDigitosPares = sumaDigitosPares + parseInt(arrayCIF[i]);
	}

	//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 < arrayCIF.length - 1; i = i + 2)
	{
		numero = arrayCIF[i] * 2;
		if (numero > 9)
		{
			numero = (numero % 10) + 1
		}
		
		sumaDigitosImpares = sumaDigitosImpares + numero;
	}
	
	//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;
	}
	digitoControl = 10 - numero;
	
	//Para los tipos de sociedades P y X el dígito de control debe ser una letra
	if (arrayCIF[0].toUpperCase() == "P" || arrayCIF[0].toUpperCase() == "X")
	{
		digitoControl = String.fromCharCode(digitoControl + 64);
	} 
	
	//Comprueba si el dígito de control se corresponde correctamente
	if (digitoControl.toString() == arrayCIF[8])
	{
		return true;
	}
	else
	{

		return false;
	}
}
