<?PHP
/*
 * DIREITOS AUTORAIS RESERVADOS (C) 2007 UFRJ
 * 
 * ESTE PROGRAMA É SOFTWARE LIVRE; VOCÊ PODE REDISTRIBUÍ-LO E/OU MODIFICÁ-LO SOB OS
 * TERMOS DA LICENÇA PÚBLICA GERAL GNU CONFORME PUBLICADA PELA FREE SOFTWARE FOUNDATION;
 * TANTO A VERSÃO 2 DA LICENÇA, COMO (A SEU CRITÉRIO) QUALQUER VERSÃO POSTERIOR.

 * ESTE PROGRAMA É DISTRIBUÍDO NA EXPECTATIVA DE QUE SEJA ÚTIL, PORÉM, SEM NENHUMA GARANTIA;
 * NEM MESMO A GARANTIA IMPLÍCITA DE COMERCIABILIDADE OU ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA.
 * CONSULTE A LICENÇA PÚBLICA GERAL DO GNU PARA MAIS DETALHES.
 * 
 * VOCÊ DEVE TER RECEBIDO UMA CÓPIA DA LICENÇA PÚBLICA GERAL DO GNU JUNTO COM ESTE PROGRAMA; 
 * SE NÃO, ACESSE <<HTTP://WWW.GNU.ORG/LICENSES/LICENSES.PT-BR.HTML>>
 */

<?php 

function tiraCharCPF($strCPF)
{
	if (strlen($strCPF) == 14)
	{
		$ncpf = substr($strCPF,0,3) .
				substr($strCPF,4,3) .
				substr($strCPF,8,3) .
				substr($strCPF,12,2);
		
		return $ncpf;
	}
	return $strCPF;
}

function poeCharCPF($strCPF)
{
	if (strlen($strCPF) == 11)
	{
		$ncpf = substr($strCPF,0,3) . '.' . 
				substr($strCPF,3,3) . '.' . 
				substr($strCPF,6,3) . '-' . 
				substr($strCPF,9,2);
				
		return $ncpf;
	}
	return $strCPF;
}

function validaCPFphp($strCPF)
{	
	//aceita dois formatos de cpf
	//1) XXX.XXX.XXX-XX
	//2) XXXXXXXXXXX (11 digitos)
	$cpfVerifica =  tiraCharCPF($strCPF) ;
	
	if(strlen($cpfVerifica) != 11 && strlen($cpfVerifica) != 14) return false;
	
	//testa se sao apenas numeros
   if(!is_numeric($cpfVerifica)) return false;
   
   //testa se todos os numeros sao repetidos
     if( ($cpfVerifica == '11111111111') ||
         ($cpfVerifica == '22222222222') ||
         ($cpfVerifica == '33333333333') ||
         ($cpfVerifica == '44444444444') ||
         ($cpfVerifica == '55555555555') ||
         ($cpfVerifica == '66666666666') ||
         ($cpfVerifica == '77777777777') ||
         ($cpfVerifica == '88888888888') ||
         ($cpfVerifica == '99999999999') ||
         ($cpfVerifica == '00000000000')
       )
	     {
	        return false;
	     }

	     //inicio da verificacao do digito verificador
        $digitoVerificador = substr($cpfVerifica, 9,2);
        for($i=0; $i<=8; $i++)
        {
           $digito[$i] = substr($cpfVerifica, $i,1);
        }
        $posicao = 10;
        $soma = 0;
        for($i=0; $i<=8; $i++)
        {
           $soma = $soma + $digito[$i] * $posicao;
           $posicao = $posicao - 1;
        }
        $digito[9] = $soma % 11;
        if($digito[9] < 2)
        {
           $digito[9] = 0;
        }
        else
        {
           $digito[9] = 11 - $digito[9];
        }
        $posicao = 11;
        $soma = 0;
        for ($i=0; $i<=9; $i++)
        {
           $soma = $soma + $digito[$i] * $posicao;
           $posicao = $posicao - 1;
        }
        $digito[10] = $soma % 11;
        if ($digito[10] < 2)
        {
            $digito[10] = 0;
        }
        else
        {
            $digito[10] = 11 - $digito[10];
        }
        $dv = $digito[9] * 10 + $digito[10];
        
        //se o digito verificador calculado for diferente do recebido
       if ($dv != $digitoVerificador)
       {
           return false;
       }
       else
       {
        return true;
       }
}


function ValidaTituloEleitorPHP($codigo)
{
		$qtd = strlen($codigo);  
		if($qtd < 13)
		{
       		for(;$qtd < 13; $qtd++)
       		{
       			$codigo = '0'.$codigo;
       		}
		}
		else return false;
		
    	$cod_estado = substr($codigo, 9, 2);

    	if(($cod_estado < 1) || ($cod_estado > 28)) return false;

       $soma = 0;

       for($i=0; $i<9; ++$i)
               $soma += $codigo[$i]*(10-$i);

       $dv = $soma % 11;

       if($dv <= 1)
       {
               if($cod_estado <= 2)
                       $dv = 1 - $dv;
               else
                       $dv = 0;
       }
       else
               $dv = 11-$dv;

       if($dv != $codigo[11]) return false;
	   
		
       $soma = $dv*2;

       for($i=9; $i<11; ++$i)
               $soma += $codigo[$i]*(13-$i);

       $dv = $soma % 11;

       if($dv <= 1)
       {
               if($cod_estado <= 2)
                       $dv = 1 - $dv;
               else
                       $dv = 0;
       }
       else
               $dv = 11-$dv;

       if($dv != $codigo[12])
               return false;

       return true;
}

function ValidaPISphp($codigo)
{
       if( strlen($codigo) != 11 )
               return false;

       $pesos = '3298765432';

       $soma = 0;
       for($i=0; $i<10; ++$i)
               $soma += $codigo[$i] * $pesos[$i];

       $dv = $soma % 11;

       if($dv != 0) $dv = 11-$dv;

       return $dv == $codigo[10];
}

function valida_cnh_php($codigo)
{
       if(strlen($codigo) > 11 || strlen($codigo) == 0)
               return false;

       $codigo = str_pad($codigo, 11, '0', 'L');

       $soma = 0;
       for($i=0; $i<9; ++$i)
               $soma += $codigo[$i]*(9-$i);

       $dv1 = $soma % 11;

       if ($dv1 == 10)       
		$incr_dig2 = -2;
       else       
		$incr_dig2 = 0;
       

       if($dv1 >= 10)
               $dv1 = 0;

       if($dv1 != $codigo[9])
               return false;

       $soma = 0;
       for($i=0; $i<9; ++$i)
               $soma += $codigo[$i]*($i+1);

       $dv2 = $soma % 11;

       if(($dv2 + $incr_dig2) < 0)
               $dv2 += 11 + $incr_dig2;
       else
               $dv2 += $incr_dig2;

       if($dv2 >= 10)
               $dv2 = 0;

       return $dv2 == $codigo[10];
}

function valida_pgu_php($codigo)
{

       if(strlen($codigo) > 9 || strlen($codigo) == 0)
               return false;

       $codigo = str_pad($codigo, 9, '0', 'L');

       $soma = 0;
       for($i=0; $i<8; ++$i)
               $soma += $codigo[$i]*(2+$i);

       $dv = $soma % 11;
       if($dv > 9)
               $dv = 0;

       return $dv == $codigo[8];
}

function ValidaHabilitacaoMotoristaPHP($codigo)
{
       return valida_cnh_php($codigo) || valida_pgu_php($codigo);
}

function is_letter_php($c)
{
	if($c >= 'a' && $c <= 'z') return 1;
	if($c >= 'A' && $c <= 'Z') return 1;
	
	return 0;
}

function validaNomePhp($str)
{
	$len = strlen($str);
	$cont = 0;
	
	for($i = 0; $i < $len; $i++)
	{
		if(is_letter_php($str[$i]))
		{
			$cont++;
		}
		else if($cont == 1)
		{
			return false;
		}
		else
		{
			$cont = 0;
		}
	}
	if($cont == 1) return false;
	else return true;
}

?>