Created
December 12, 2013 20:46
-
-
Save aaoliveira/7935141 to your computer and use it in GitHub Desktop.
Validador de cpf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Metódo para válidar um CPF | |
* @param String $cpf | |
* @return boolean | |
*/ | |
public function validCPF($cpf) { | |
// determina um valor inicial para o digito $d1 e $d2 | |
// pra manter o respeito ;) | |
$d1 = 0; | |
$d2 = 0; | |
// remove tudo que não seja número | |
$cpf = preg_replace("/[^0-9]/", "", $cpf); | |
// lista de cpf inválidos que serão ignorados | |
$ignore_list = array( | |
'00000000000', | |
'01234567890', | |
'11111111111', | |
'22222222222', | |
'33333333333', | |
'44444444444', | |
'55555555555', | |
'66666666666', | |
'77777777777', | |
'88888888888', | |
'99999999999' | |
); | |
// se o tamanho da string for dirente de 11 ou estiver | |
// na lista de cpf ignorados já retorna false | |
if (strlen($cpf) != 11 || in_array($cpf, $ignore_list)) { | |
return false; | |
} else { | |
// inicia o processo para achar o primeiro | |
// número verificador usando os primeiros 9 dígitos | |
for ($i = 0; $i < 9; $i++) { | |
// inicialmente $d1 vale zero e é somando. | |
// O loop passa por todos os 9 dígitos iniciais | |
$d1 += $cpf[$i] * (10 - $i); | |
} | |
// acha o resto da divisão da soma acima por 11 | |
$r1 = $d1 % 11; | |
// se $r1 maior que 1 retorna 11 menos $r1 se não | |
// retona o valor zero para $d1 | |
$d1 = ($r1 > 1) ? (11 - $r1) : 0; | |
// inicia o processo para achar o segundo | |
// número verificador usando os primeiros 9 dígitos | |
for ($i = 0; $i < 9; $i++) { | |
// inicialmente $d2 vale zero e é somando. | |
// O loop passa por todos os 9 dígitos iniciais | |
$d2 += $cpf[$i] * (11 - $i); | |
} | |
// $r2 será o resto da soma do cpf mais $d1 vezes 2 | |
// dividido por 11 | |
$r2 = ($d2 + ($d1 * 2)) % 11; | |
// se $r2 mair que 1 retorna 11 menos $r2 se não | |
// retorna o valor zeroa para $d2 | |
$d2 = ($r2 > 1) ? (11 - $r2) : 0; | |
// retona true se os dois últimos dígitos do cpf | |
// forem igual a concatenação de $d1 e $d2 e se não | |
// deve retornar false. | |
return (substr($cpf, -2) == $d1 . $d2) ? true : false; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment