
// ************ CPF ******************
function js_val_cpf( cpf )
{
	// Se o cpf vier formato, elimina a formatação
	cpf = cpf.replace(".","");
	cpf = cpf.replace("-","");

	if( cpf.length != 11 || 
		cpf == '00000000000' || cpf == '11111111111' || cpf == '22222222222' || 
		cpf == '33333333333' || cpf == '44444444444' || cpf == '55555555555' || 
		cpf == '66666666666' || cpf == '77777777777' || cpf == '88888888888' || 
		cpf == '99999999999' )	
    	return false;
	
    var dv1_informado = cpf.substring( 9, 10 );
	var dv2_informado = cpf.substring( 10, 11 );

	var somadv1 = 0;
	var somadv2 = 0;	
	
	// Determinando o primeiro dígito verificador	
	var primeira_sequencia = cpf.substring( 0, 9 );		
	
	for( var i=0; i<9; i++ )
	{			
		somadv1 = somadv1 + ( primeira_sequencia.charAt(i) * (10-i) );
	}
	
	var restodv1 = somadv1 % 11;
	
	if( restodv1 < 2 )
		dv1 = 0;
	else
		dv1 = 11 - restodv1;
	
	if( dv1 != dv1_informado )
		return false;
		
	// Determinando o segundo dígito verificador
	var segunda_sequencia  = primeira_sequencia + dv1;
	
	for( var j=0; j<10; j++ )
	{
		somadv2 = somadv2 + ( segunda_sequencia.charAt(j) * (11-j) );
	}
	
	restodv2 = somadv2 % 11;
	
	if( restodv2 < 2 )
		dv2 = 0;
	else
		dv2 = 11 - restodv2;
		
	if( dv2 != dv2_informado )	
		return false;
	
	return true;	
}

// ***************** CNPJ *************************
function js_val_cnpj( cnpj )
{
	cnpj = cnpj.replace(".","");
	cnpj = cnpj.replace(".","");
	cnpj = cnpj.replace("-","");
	cnpj = cnpj.replace("/","");
	
	if( cnpj.length != 14 || 
		cnpj == '00000000000000' || cnpj == '11111111111111' || 
		cnpj == '22222222222222' || cnpj == '33333333333333' ||
		cnpj == '44444444444444' || cnpj == '55555555555555' ||
		cnpj == '55555555555555' || cnpj == '66666666666666' ||
		cnpj == '77777777777777' || cnpj == '88888888888888' ||
		cnpj == '99999999999999' )	
    	return false;
    	
	var dv1_informado = cnpj.substring( 12, 13 );
	var dv2_informado = cnpj.substring( 13, 14 );
	
	var somadv1 = 0;
	var somadv2 = 0;

	var primeira_sequencia = cnpj.substring(0, 12); 
	
	var fator_multiplicador = 5;
	
	for( var i=0; i<12; i++ )
	{
		if( fator_multiplicador == 1 )
			fator_multiplicador = 9;
			
		somadv1 = somadv1 + ( primeira_sequencia.charAt(i) * fator_multiplicador );
		
		fator_multiplicador--;
	}
	
	var restodv1 = somadv1 % 11;
	
	if( restodv1 < 2 )
		dv1 = 0;
	else
		dv1 = 11 - restodv1;
		
	if( dv1 != dv1_informado )
		return false;	
		
	var segunda_sequencia = primeira_sequencia + dv1;
	
	fator_multiplicador = 6;
	
	for( var j=0; j<13; j++ )
	{	
		if( fator_multiplicador == 1 )
			fator_multiplicador = 9;
	
		somadv2 = somadv2 + ( segunda_sequencia.charAt(j) * fator_multiplicador );		
		
		fator_multiplicador--;
	}
	
	restodv2 = somadv2 % 11
	
	if( restodv2 < 2 )
		dv2 = 0;
	else
		dv2 = 11 - restodv2;
	
	if( dv2 != dv2_informado )	
		return false;	
	
	return true;
}

// ********** Contribuinte Singular e Coletivo (Portugal)***********************
function js_val_nif( nif )
{
    var c;
    var checkDigit = 0;

    //Verifica se é nulo, se é numérico e se tem 9 dígitos
    if(nif != null && !isNaN(nif) && nif.length == 9)
    {
    	
        //Obtem o primeiro número do NIF
        c = nif.charAt(0);
 
        //Verifica se o primeiro número é (1, 2, 5, 6, 8 ou 9)
        if(c == '1' || c == '2' || c == '5' || c == '6' || c == '8' || c == '9')
        {
            //Calculo do Digito de Controle
            checkDigit = c * 9;
            var i = 0;
            for(i = 2; i <= 8; i++)
            {
                checkDigit += nif.charAt(i-1) * (10-i);
            }
            checkDigit = 11 - (checkDigit % 11);
 
            //Se o digito de controle é maior que dez, coloca-o a zero
            if(checkDigit >= 10)
                checkDigit = 0;
 			
            //Compara o digito de controle com o último numero do NIF
            //Se igual, o NIF é válido.
            if(checkDigit == nif.charAt(8))
                return true;
        }
    }

    return false;
}

// ******************* CEP ******************************
function js_val_cep( cep_verificar )
{
    exp = /^\d{5}-\d{3}$/;

    return exp.test( cep_verificar );
}
