Como validar um CPF com PHP

Código em PHP

Antes de aprender a validar um CPF, vamos entender um pouco como ele funciona

O CPF é composto por 11 dígitos, sendo os últimos 2 dígitos chamados de dígitos verificadores. Vamos pegar o CPF 123.456.789-XX como exemplo para entender como funciona o cálculo do CPF:

Você vai pegar os 9 primeiros dígitos e multiplicar cada dígito. Nesse CPF de exemplo, ficaria assim:

1  2 3 4 5 6 7 8 9

10 9 8 7 6 5 4 3 2 

Multiplicando cada coluna, ou seja, 1x10, 2x9, 3x8 e por aí vai..., após multiplicar tudo e somar todos os valores, encontramos o valor: 210. Esse número deve ser dividido por 11 e você deve guardar o resto da divisão, que será 1. Agora você pega 11-1, que será igual a 10. Se 10 for maior ou igual a 10, o nosso primeiro dígito verificador será 0, caso contrário segue como 10. Para esse exemplo, encontramos nosso primeiro dígito, o valor 0.

Agora vamos calcular o segundo dígito verificador. Você deve pegar todos os 11 primeiros dígitos e o primeiro dígito verificador encontrado. Ficando assim:

1  2  3 4 5 6 7 8 9 0

11 10 9 8 7 6 5 4 3 2

Multiplicando cada coluna, ou seja, 11x1, 10x2, 9x3, ..., após multiplicar tudo, o total deve ser igual a 255. Agora vamos usar a mesma lógica do primeiro dígito verificador. Pegaremos o resto da divisão de 255 por 11, que será 2. Agora você deve pegar o número 11 e subtrair de 2, sendo o número que encontramos. O valor será igual a 9, com esse valor, você deve comparar se ele é maior ou igual a 10, se for, nosso segundo dígito verificador será igual a 0. Em nosso exemplo o valor é 9, é um valor menor ou igual a 10, logo nosso segundo dígito verificador será igual 9 mesmo.

Então é isso, encontramos nossos dois dígitos verificadores 0 e 9.

Nesse exemplo, nosso CPF seria: 123.456.789-09.

Codigo de exemplo

Como testar e validar se meu CPF está correto com o Geratudo?

Aqui no Geratudo, temos uma ferramenta para gerar e validar CPF. Se você deseja colocar em prática e validar se está tudo certo com o seu CPF, utilize nossa ferramenta de validação de CPF, basta clicar aqui. Caso deseje gerar CPF, você pode usar nosso gerador de CPF. Também convido você a conhecer nosso gerador de CNPJ.

Validando um CPF em PHP com a ajuda do Geratudo: Passo a Passo Detalhado

O algoritmo que você está utilizando é uma implementação para validar o Cadastro de Pessoa Física (CPF) em PHP. A validação do CPF é essencial em muitos sistemas para garantir a integridade dos dados e evitar erros causados por informações incorretas.

Passo 1: Limpeza e Preparação dos Dados

A primeira etapa do algoritmo consiste em limpar o CPF de qualquer caractere não numérico. Isso é feito utilizando a expressão regular, que remove todos os caracteres que não são dígitos. Nesse exemplo, recebemos a variável cpf por parâmetro em uma função.

<?php

$cpf = preg_replace('/[^0-9]/', '', $cpf);

?>

Passo 2: Verificação do Tamanho

Após a limpeza, o algoritmo verifica se o CPF informado tem exatamente 11 dígitos. Um CPF válido deve ter essa quantidade específica de números.

<?php

if (empty($cpf) || strlen($cpf) != 11) {
    return false;
}

?>

Código em PHP

Passo 3: Conversão para Array de Números

O CPF limpo é então convertido para um array de números para facilitar a manipulação dos dígitos individuais.

<?php

$elements = array_map('intval', str_split($cpf));

?>

Passo 4: Cálculo do Dígito Verificador 1 (D1)

Agora, o algoritmo realiza o cálculo do primeiro dígito verificador (D1), como explicamos acima

<?php

$last_element = $elements[count($elements) - 1];
$penultimate_element = $elements[count($elements) - 2];

list($n1, $n2, $n3, $n4, $n5, $n6, $n7, $n8, $n9) = $elements;

$d1 = (
    $n9 * 2 +
    $n8 * 3 +
    $n7 * 4 +
    $n6 * 5 +
    $n5 * 6 +
    $n4 * 7 +
    $n3 * 8 +
    $n2 * 9 +
    $n1 * 10
);

$d1 = 11 - ($d1 % 11);
if ($d1 >= 10) {
    $d1 = 0;
}

?>

Passo 5: Verificação do Primeiro Dígito Verificador

O algoritmo verifica se o primeiro dígito verificador calculado (D1) é igual ao penúltimo dígito do CPF.

<?php

if ($penultimate_element != $d1) {
    return false;
}

?>

Passo 6: Cálculo do Dígito Verificador 2 (D2)

Com a validação do primeiro dígito, o algoritmo prossegue para o cálculo do segundo dígito verificador (D2):

<?php

$d2 = (
    $d1 * 2 +
    $n9 * 3 +
    $n8 * 4 +
    $n7 * 5 +
    $n6 * 6 +
    $n5 * 7 +
    $n4 * 8 +
    $n3 * 9 +
    $n2 * 10 +
    $n1 * 11
);

$d2 = 11 - ($d2 % 11);
if ($d2 >= 10) {
    $d2 = 0;
}

?>

Passo 7: Verificação do Segundo Dígito Verificador em PHP com o Geratudo

Finalmente, o algoritmo verifica se o segundo dígito verificador calculado (D2) é diferente ao último dígito do CPF, se for diferente, ele retorna false, informando que é um CPF inválido, caso contrário ele segue pra última etapa.

<?php

if ($last_element != $d2) {
    return false;
}

?>

Passo 8: CPF Válido

Se o algoritmo passar por todas essas etapas sem retornar false, o CPF é considerado válido, e a função retorna true.

<?php

return true;

?>

Resultado Final:

function validarCPF($cpf) {

    // Remover caracteres não numéricos

    $cpf = preg_replace('/[^0-9]/', '', $cpf);

    

    // Verificar se o CPF está vazio ou não tem 11 dígitos

    if (empty($cpf) || strlen($cpf) != 11) {

        return false;

    }

    

    // Converter a string em um array de inteiros

    $elements = array_map('intval', str_split($cpf));

    

    // Calcular o primeiro dígito verificador

    list($n1, $n2, $n3, $n4, $n5, $n6, $n7, $n8, $n9) = $elements;

    $d1 = (

        $n9 * 2 +

        $n8 * 3 +

        $n7 * 4 +

        $n6 * 5 +

        $n5 * 6 +

        $n4 * 7 +

        $n3 * 8 +

        $n2 * 9 +

        $n1 * 10

    );

    $d1 = 11 - ($d1 % 11);

    if ($d1 >= 10) {

        $d1 = 0;

    }

    

    // Verificar se o penúltimo elemento é igual ao primeiro dígito verificador

    $penultimate_element = $elements[count($elements) - 2];

    if ($penultimate_element != $d1) {

        return false;

    }

    

    // Calcular o segundo dígito verificador

    $d2 = (

        $d1 * 2 +

        $n9 * 3 +

        $n8 * 4 +

        $n7 * 5 +

        $n6 * 6 +

        $n5 * 7 +

        $n4 * 8 +

        $n3 * 9 +

        $n2 * 10 +

        $n1 * 11

    );

    $d2 = 11 - ($d2 % 11);

    if ($d2 >= 10) {

        $d2 = 0;

    }

    

    // Verificar se o último elemento é igual ao segundo dígito verificador

    $last_element = $elements[count($elements) - 1];

    if ($last_element != $d2) {

        return false;

    }

    

    // Se todas as verificações passaram, o CPF é válido

    return true;

}

?>

Espero que tenham gostado da explicação! Para mais detalhes, acessem o Geratudo, para conseguir gerar e validar CPF válidos.

Caso tenha interesse, também explicamos em outro artigo como funciona a validação do CPF, você pode encontrar aqui.