Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Validar CPF em PHP (Completo)
<?php
function validaCPF($cpf) {
// Extrai somente os números
$cpf = preg_replace( '/[^0-9]/is', '', $cpf );
// Verifica se foi informado todos os digitos corretamente
if (strlen($cpf) != 11) {
return false;
}
// Verifica se foi informada uma sequência de digitos repetidos. Ex: 111.111.111-11
if (preg_match('/(\d)\1{10}/', $cpf)) {
return false;
}
// Faz o calculo para validar o CPF
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;
if ($cpf{$c} != $d) {
return false;
}
}
return true;
}
@augustocparaujo

This comment has been minimized.

Copy link

commented Jan 9, 2018

testou?

@rafael-neri

This comment has been minimized.

Copy link
Owner Author

commented Feb 6, 2018

@augustocparaujo sim, testei.
Fiz pra usar em um projeto.

@Wyru

This comment has been minimized.

Copy link

commented Feb 16, 2018

Muito bom :)

@nicklleite

This comment has been minimized.

Copy link

commented Feb 20, 2018

Com certeza a abordagem mais simples que eu já vi...

@RenanLazarotto

This comment has been minimized.

Copy link

commented Jun 29, 2018

Facilitou muito na hora de validar CPF, adicionei ao meu sistema com mais algumas verificações internas e agora está perfeito. Obrigado!

@rodrigoalmeidanet

This comment has been minimized.

Copy link

commented Nov 2, 2018

Funcioou bacana! Parabéns!

@alanrbentes

This comment has been minimized.

Copy link

commented Jan 23, 2019

Código otimizado, excelente ! Vlu.

@israeldax

This comment has been minimized.

Copy link

commented May 31, 2019

Obrigado por compartilhar!

@jonathangoncalves

This comment has been minimized.

Copy link

commented Jul 1, 2019

<?php
/* Criando Interface para Exceptions */
interface ExceptionInterface {
}

/* Criando Exception exclusiva para CPF. Ajuda muito a descobrir o tipo da Exception */
class InvalidCpfException extends \InvalidArgumentException implements ExceptionInterface
{

}

class Cpf
{
    private $cpf;

    /**
     * Cpf constructor.
     * @param string $cpf
     */
    public function __construct($cpf)
    {
        if ($this->validate($cpf) === false) {
            throw new InvalidCpfException;
        }
        return $this->cpf = $cpf;
    }

    public function __toString()
    {
        return $this->cpf;
    }

    private function validate($cpf)
    {

        // Extrair somente os números
        $cpf = preg_replace('/[^0-9]/is', '', $cpf);

        // Verifica se foi informado todos os digitos corretamente
        if (strlen($cpf) != 11) {
            return false;
        }
        // Verifica se foi informada uma sequência de digitos repetidos. Ex: 111.111.111-11
        if (preg_match('/(\d)\1{10}/', $cpf)) {
            return false;
        }
        // Faz o calculo para validar o CPF
        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;
            if ($cpf{$c} != $d) {
                return false;
            }
        }
        return true;
    }
}

//chamada de exemplo:

try{
    $cpf = new Cpf('123.456.789-10');

echo $cpf;
} catch(InvalidCpfException $e){
echo "cpf invalido";
} catch (Exception $e){
echo "Erro Inesperado";
}

@rafael-neri

This comment has been minimized.

Copy link
Owner Author

commented Jul 1, 2019

@jonathangoncalves, ficou bem bacana.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.