Pessoal, boa noite.
Para quem procura uma função php que valide CPF com muitos critérios de teste,
segue uma que utilizo muito em meus desenvolvimentos:
Para quem procura uma função php que valide CPF com muitos critérios de teste,
segue uma que utilizo muito em meus desenvolvimentos:
function validaCpf($cpf)
{
$cpf = trim($cpf);
$cpf = str_pad(preg_replace('/[^0-9]/', '', $cpf), 11, '0', STR_PAD_LEFT);
$j = 0;
for($i = 0 ; $i<(strlen($cpf)) ; $i++)
{
if(is_numeric($cpf[$i]))
{
$num[$j] = $cpf[$i];
$j++;
}
}
if(count($num) != 11)
{
$cpfValido = 0;
return false;
}
for($i = 0; $i < 10; $i++)
{
if ($num[0]==$i && $num[1]==$i && $num[2]==$i && $num[3]==$i && $num[4]==$i && $num[5]==$i && $num[6]==$i && $num[7]==$i && $num[8]==$i)
{
$cpfValido = 0;
break;
}
}
for ($t = 9; $t < 11; $t++)
{
for ($d = 0, $c = 0; $c < $t; $c++)
{
$d += $cpf{$c} * (($t + 1) - $c);
}
$d = ((10 * $d) % 11) % 10;
$cpfValido = $cpf{$c} != $d ? 0 : $cpfValido;
}
//Calcula e compara o primeiro dígito verificador.
if(!isset($cpfValido))
{
$j=10;
for($i = 0; $i < 9 ; $i++)
{
$mult[$i]=$num[$i]*$j;
$j--;
}
$soma = array_sum($mult);
$resto = $soma % 11;
if($resto < 2)
$digito1 = 0;
else
$digito1 = 11 - $resto;
if($digito1!=$num[9])
$cpfValido = 0;
}
//Calcula e compara o segundo dígito verificador.
if(!isset($cpfValido))
{
$j = 11;
for($i = 0 ; $i < 10 ; $i++)
{
$mult[$i]=$num[$i]*$j;
$j--;
}
$soma = array_sum($mult);
$resto = $soma % 11;
if($resto < 2)
$digito2 = 0;
else
$digito2 = 11 - $resto;
if($digito2!=$num[10])
$cpfValido = 0;
else
$cpfValido = 1;
}
return $cpfValido == 1 ? true : false;
}//DOMINUS - 16.09.2012