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.

@rogerionunes

This comment has been minimized.

Copy link

commented Aug 28, 2019

Show! Valeu!

@softkleen

This comment has been minimized.

Copy link

commented Sep 19, 2019

obrigado!

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.