* @version 1.0 Debugada em 26/09/2011 no PHP 5.3.8 * @param string $cpf Guarda o cpf como ele foi digitado pelo cliente * @param array $num Guarda apenas os números do cpf * @param boolean $isCpfValid Guarda o retorno da função * @param int $multiplica Auxilia no Calculo dos Dígitos verificadores * @param int $soma Auxilia no Calculo dos Dígitos verificadores * @param int $resto Auxilia no Calculo dos Dígitos verificadores * @param int $dg Dígito verificador * @return boolean "true" se o cpf é válido ou "false" caso o contrário * */ function isCpfValid($cpf) { //Etapa 1: Cria um array com apenas os digitos numéricos, isso permite receber o cpf em diferentes formatos como "000.000.000-00", "00000000000", "000 000 000 00" etc... $j=0; for($i=0; $i<(strlen($cpf)); $i++) { if(is_numeric($cpf[$i])) { $num[$j]=$cpf[$i]; $j++; } } //Etapa 2: Conta os dígitos, um cpf válido possui 11 dígitos numéricos. if(count($num)!=11) { $isCpfValid=false; } //Etapa 3: Combinações como 00000000000 e 22222222222 embora não sejam cpfs reais resultariam em cpfs válidos após o calculo dos dígitos verificares e por isso precisam ser filtradas nesta parte. else { 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) { $isCpfValid=false; break; } } } //Etapa 4: Calcula e compara o primeiro dígito verificador. if(!isset($isCpfValid)) { $j=10; for($i=0; $i<9; $i++) { $multiplica[$i]=$num[$i]*$j; $j--; } $soma = array_sum($multiplica); $resto = $soma%11; if($resto<2) { $dg=0; } else { $dg=11-$resto; } if($dg!=$num[9]) { $isCpfValid=false; } } //Etapa 5: Calcula e compara o segundo dígito verificador. if(!isset($isCpfValid)) { $j=11; for($i=0; $i<10; $i++) { $multiplica[$i]=$num[$i]*$j; $j--; } $soma = array_sum($multiplica); $resto = $soma%11; if($resto<2) { $dg=0; } else { $dg=11-$resto; } if($dg!=$num[10]) { $isCpfValid=false; } else { $isCpfValid=true; } } //Trecho usado para depurar erros. /* if($isCpfValid==true) { echo "Cpf é Válido"; } if($isCpfValid==false) { echo "Cpf Inválido"; } */ //Etapa 6: Retorna o Resultado em um valor booleano. return $isCpfValid; } ?>