Como Funciona o Algoritmo de Validação do CPF (Guia para Programadores)
Todo desenvolvedor brasileiro, mais cedo ou mais tarde, precisa validar um CPF. Seja num formulário de cadastro, numa integração fiscal ou num sistema de teste, o CPF é o identificador universal de pessoas físicas no Brasil — e sua validação matemática é um dos algoritmos mais implementados (e mais mal implementados) do desenvolvimento nacional. Este guia explica o algoritmo em profundidade, com o passo a passo matemático e as armadilhas mais comuns.
A anatomia do CPF
O CPF tem 11 dígitos: XXX.XXX.XXX-DV, onde os 9 primeiros formam o número base e os 2 últimos são dígitos verificadores (DV) calculados a partir dos anteriores.
Curiosidade pouco conhecida: o 9º dígito indica a região fiscal de emissão. 8 corresponde a São Paulo, 1 ao Distrito Federal/Goiás/Tocantins, 0 ao Rio Grande do Sul, e assim por diante. Isso não afeta a validação, mas explica por que CPFs de estados diferentes têm "padrões" perceptíveis.
Cálculo do primeiro dígito verificador
Multiplica-se cada um dos 9 primeiros dígitos por pesos decrescentes de 10 a 2, soma-se tudo, e o resto da divisão por 11 determina o dígito:
Exemplo com o CPF base 111.444.777:
1×10 + 1×9 + 1×8 + 4×7 + 4×6 + 4×5 + 7×4 + 7×3 + 7×2
= 10 + 9 + 8 + 28 + 24 + 20 + 28 + 21 + 14 = 162
162 ÷ 11 = 14, resto 8.
Regra: se o resto for 0 ou 1, o dígito é 0. Caso contrário, é 11 − resto. Aqui: 11 − 8 = 3.
Cálculo do segundo dígito verificador
Mesmo processo, agora com 10 dígitos (os 9 originais + o primeiro DV) e pesos de 11 a 2:
1×11 + 1×10 + 1×9 + 4×8 + 4×7 + 4×6 + 7×5 + 7×4 + 7×3 + 3×2
= 11 + 10 + 9 + 32 + 28 + 24 + 35 + 28 + 21 + 6 = 204
204 ÷ 11 = 18, resto 6. Dígito: 11 − 6 = 5.
Portanto, 111.444.777-35 é um CPF matematicamente válido.
A armadilha dos dígitos repetidos
Aqui está o erro mais comum em implementações: CPFs com todos os dígitos iguais — 000.000.000-00, 111.111.111-11, até 999.999.999-99 — passam no cálculo matemático dos verificadores. A aritmética funciona, mas esses números nunca são emitidos pela Receita Federal.
Toda validação séria precisa rejeitar explicitamente essas 10 sequências antes (ou depois) do cálculo dos DVs. Bibliotecas maduras fazem isso; implementações caseiras frequentemente esquecem — e é exatamente o tipo de bug que passa em testes superficiais e explode em produção quando um usuário digita 111.111.111-11 para "testar" o formulário.
Pseudocódigo da validação completa
A estrutura de qualquer implementação correta:
1. Remover caracteres não numéricos (pontos, traço, espaços).
2. Verificar se sobraram exatamente 11 dígitos. Se não, inválido.
3. Verificar se todos os dígitos são iguais. Se sim, inválido.
4. Calcular o primeiro DV com pesos 10..2 e comparar com o 10º dígito.
5. Calcular o segundo DV com pesos 11..2 e comparar com o 11º dígito.
6. Se ambos conferem, válido.
O que a validação matemática NÃO garante
Um ponto crucial para arquitetura de sistemas: a validação matemática confirma apenas que o número poderia ser um CPF real. Ela não verifica:
Existência: o número pode nunca ter sido emitido pela Receita.
Situação cadastral: um CPF real pode estar regular, suspenso, cancelado ou nulo.
Titularidade: nada garante que o CPF pertence à pessoa que o digitou.
Para essas verificações, é necessária consulta a serviços externos (a consulta pública da Receita, ou serviços como Serpro Datavalid para verificação de titularidade). Em termos de arquitetura: valide matematicamente no frontend para UX imediata, revalide no backend por segurança, e consulte serviços externos apenas quando o negócio exigir — cada consulta externa tem custo e latência.
Validação em formulários: boas práticas de UX
Aplique máscara automática (000.000.000-00) conforme o usuário digita — reduz erros e melhora legibilidade. Valide em tempo real ao completar 11 dígitos, com feedback visual imediato. Armazene sem formatação (apenas dígitos) e formate na exibição. E trate o CPF como dado pessoal sensível sob a LGPD: não o exponha em URLs, logs de aplicação ou mensagens de erro.
Testando sua implementação
Casos de teste essenciais: CPFs válidos conhecidos, os 10 CPFs de dígitos repetidos (todos devem falhar), números com 10 e 12 dígitos, strings com letras, e o CPF válido com formatação variada (com e sem máscara). Para gerar massa de teste com CPFs válidos aleatórios, use nosso Gerador de CPF — e para validar números individuais, o Validador de CPF mostra exatamente qual etapa da validação falhou.