Algoritmo
Como validar um CPF
O CPF não é um número qualquer: os dois últimos dígitos são calculados a partir dos nove primeiros. Isso é o que permite detectar um dígito trocado sem consultar base nenhuma.
A estrutura do número
Os 11 dígitos se dividem em três partes. Tomando 111.444.777-35 como exemplo:
- Dígitos 1 a 8 — o número de série dentro da região.
- Dígito 9 — a região fiscal onde o CPF foi emitido.
- Dígitos 10 e 11 — os verificadores, calculados abaixo.
O cálculo
Os dois dígitos usam a mesma receita, chamada módulo 11. Muda apenas quantos dígitos entram na conta e, por consequência, os pesos:
- Multiplique cada dígito por um peso, que começa alto e decresce até 2.
- Some todos os produtos.
- Divida a soma por 11 e guarde o resto.
- Se o resto for menor que 2, o dígito verificador é 0. Caso contrário, é 11 menos o resto.
O passo 4 é onde a maioria das implementações caseiras erra: esquecer o caso do resto 0 ou 1 produz um validador que rejeita CPFs legítimos terminados em 0.
Exemplo resolvido: 111.444.777-35
1º dígito verificador
Entram 9 dígitos, com pesos de 10 a 2:
| Dígito | 1 | 1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 |
|---|---|---|---|---|---|---|---|---|---|
| Peso | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
| Produto | 10 | 9 | 8 | 28 | 24 | 20 | 28 | 21 | 14 |
Soma = 162. Dividindo por 11, o resto é 8. Como o resto é 2 ou mais, o dígito é 11 − 8 = 3. O 1º dígito verificador é 3.
2º dígito verificador
Entram 10 dígitos, com pesos de 11 a 2:
| Dígito | 1 | 1 | 1 | 4 | 4 | 4 | 7 | 7 | 7 | 3 |
|---|---|---|---|---|---|---|---|---|---|---|
| Peso | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
| Produto | 11 | 10 | 9 | 32 | 28 | 24 | 35 | 28 | 21 | 6 |
Soma = 204. Dividindo por 11, o resto é 6. Como o resto é 2 ou mais, o dígito é 11 − 6 = 5. O 2º dígito verificador é 5.
Os dois dígitos calculados são 35, que é exatamente como 111.444.777-35 termina. O CPF é válido.
Os dois casos especiais
Resto 0 ou 1
Quando a soma é divisível por 11, ou deixa resto 1, o dígito verificador é 0. Aplicar 11 menos o resto nesses casos daria 11 ou 10 — números de dois dígitos, que não cabem numa posição. Cada dígito verificador cai nessa situação em 2 dos 11 restos possíveis, ou seja 18,2% das vezes; como basta um dos dois para quebrar a conta, um validador que pula essa regra rejeita cerca de um terço dos CPFs válidos (40/121, ou 33,1%).
Todos os dígitos iguais
111.111.111-11, 000.000.000-00 e as outras oito sequências desse tipo passam no cálculo do módulo 11. Ainda assim não são CPFs válidos, e precisam ser rejeitadas por uma regra à parte. Como são exatamente o que alguém digita para testar um formulário, esquecer esse caso costuma custar caro.
Implementações prontas
A função de validação escrita e comentada emJavaScript, TypeScript, Python, PHP, Java e C#.
Para ver a conta acontecendo com números novos, o gerador mostra a memória de cálculo de cada CPF que produz.