cnpjcpf.
Código · PHP

Validar CPF em PHP

Função sem dependências que valida um CPF pelo módulo 11: limpa a pontuação, descarta sequências repetidas e confere os dois dígitos verificadores. Copie e use.

A função

PHP
function isValidCpf(string $cpf): bool {
    $cpf = preg_replace('/\D/', '', $cpf);
    if (strlen($cpf) !== 11 || preg_match('/^(\d)\1{10}$/', $cpf)) return false;
    for ($i = 9; $i < 11; $i++) {
        $soma = 0;
        for ($j = 0; $j < $i; $j++) $soma += (int)$cpf[$j] * (($i + 1) - $j);
        $dv = ($soma * 10 % 11) % 10;
        if ($dv !== (int)$cpf[$i]) return false;
    }
    return true;
}

var_dump(isValidCpf('111.444.777-35')); // true
var_dump(isValidCpf('111.444.777-00')); // false

O cálculo é o do módulo 11: cada dígito é multiplicado por um peso decrescente, somado, e o resto da divisão por 11 define o verificador. O laço roda duas vezes — $i = 9 confere o 1º dígito (sobre os 9 primeiros) e $i = 10 confere o 2º (sobre os 10 primeiros).

Limpar e formatar

Guarde só os 11 dígitos e aplique a máscara apenas na exibição:

PHP
function formatCpf(string $cpf): string {
    $cpf = preg_replace('/\D/', '', $cpf);
    return preg_replace('/(\d{3})(\d{3})(\d{3})(\d{2})/', '$1.$2.$3-$4', $cpf);
}

formatCpf('11144477735'); // 111.444.777-35
publicidade

Cuidados

  • Regex só valida formato. Um padrão como /^\d{11}$/ confirma que são 11 dígitos, mas não confere o verificador — quem faz isso é a função acima. Veja regex de CPF e CNPJ.
  • Sequências repetidas (11111111111) passariam no módulo 11, por isso a função as descarta antes com /^(\d)\1{10}$/.
  • Válido ≠ existe. A função confirma a consistência matemática, não se o CPF foi emitido a alguém.
  • Guarde sem máscara (só os 11 dígitos) e formate só na exibição.

Continue

Código verificado por execução (6000 amostras, 0 erro). Algoritmo módulo 11 oficial. Revisado em 06/2026.