Algoritmo do CPF: Como Funciona o Módulo 11
O CPF tem 11 dígitos no formato XXX.XXX.XXX-DD, onde os 9 primeiros identificam a pessoa e os 2 últimos (DD) são dígitos verificadores calculados pelo algoritmo de módulo 11. É esse cálculo que o gerador de CPF e o validador de CPF usam internamente para produzir e conferir números.
Estrutura do CPF
5 2 9 . 9 8 2 . 2 4 7 - 2 5
───────────────────────────────── ───
9 dígitos base D1 D2 (verificadores)Os 8 primeiros dígitos compõem a base numérica do documento. O 9º dígito indica a região fiscal de emissão. D1 e D2 são derivados dos dígitos anteriores: se qualquer dígito base mudar, os verificadores mudam junto.
Passo 1: Primeiro dígito verificador (D1)
Multiplique cada um dos 9 dígitos base pelo peso decrescente de 10 a 2 e some:
Dígito: 5 2 9 9 8 2 2 4 7
Peso: 10 9 8 7 6 5 4 3 2
Soma = 5×10 + 2×9 + 9×8 + 9×7 + 8×6 + 2×5 + 2×4 + 4×3 + 7×2
= 50 + 18 + 72 + 63 + 48 + 10 + 8 + 12 + 14
= 295Calcule o resto da divisão por 11:
295 % 11 = 295 - (26 × 11) = 295 - 286 = 9Aplique a regra:
resto < 2 → D1 = 0
resto >= 2 → D1 = 11 - resto11 - 9 = 2 → D1 = 2
Passo 2: Segundo dígito verificador (D2)
Agora use os 9 dígitos base + D1 (10 dígitos), com pesos de 11 a 2:
Dígito: 5 2 9 9 8 2 2 4 7 2
Peso: 11 10 9 8 7 6 5 4 3 2
Soma = 5×11 + 2×10 + 9×9 + 9×8 + 8×7 + 2×6 + 2×5 + 4×4 + 7×3 + 2×2
= 55 + 20 + 81 + 72 + 56 + 12 + 10 + 16 + 21 + 4
= 347347 % 11 = 347 - (31 × 11) = 347 - 341 = 6
11 - 6 = 5 → D2 = 5Resultado: CPF 529.982.247-25. Ambos os verificadores conferem.
Pseudocódigo de validação
função validarCPF(cpf):
dígitos = remover_não_numéricos(cpf)
se comprimento(dígitos) ≠ 11 → inválido
se todos os dígitos são iguais → inválido
// Primeiro verificador (D1)
soma = Σ dígitos[i] × (10 - i), para i = 0..8
resto = soma % 11
d1 = (resto < 2) ? 0 : 11 - resto
se dígitos[9] ≠ d1 → inválido
// Segundo verificador (D2)
soma = Σ dígitos[i] × (11 - i), para i = 0..9
resto = soma % 11
d2 = (resto < 2) ? 0 : 11 - resto
se dígitos[10] ≠ d2 → inválido
retornar válidoPara implementações prontas e testadas, veja validar CPF em JavaScript e as demais 9 linguagens disponíveis.
Geração em JavaScript
O processo inverso: gere 9 dígitos aleatórios, calcule D1 e D2 com o mesmo algoritmo e concatene. É exatamente isso que o gerador de CPF faz ao criar números para teste.
function gerarCPF() {
var digits = [];
for (var i = 0; i < 9; i++) {
digits.push(Math.floor(Math.random() * 10));
}
// Primeiro verificador
var soma = 0;
for (var i = 0; i < 9; i++) {
soma += digits[i] * (10 - i);
}
var resto = soma % 11;
digits.push(resto < 2 ? 0 : 11 - resto);
// Segundo verificador
soma = 0;
for (var i = 0; i < 10; i++) {
soma += digits[i] * (11 - i);
}
resto = soma % 11;
digits.push(resto < 2 ? 0 : 11 - resto);
return digits.join('');
}Casos especiais
| Caso | Comportamento |
|---|---|
| Resto = 0 ou 1 | Dígito verificador = 0 (não 11 - resto) |
| Todos os dígitos iguais | Rejeitado. 111.111.111-11 passa no módulo 11 mas não é CPF válido |
| Entrada com pontuação | Remover . e - antes de processar |
| Menos de 11 dígitos | Inválido |
Para testar rapidamente se um número segue essas regras, use o validador de CPF online. Também oferecemos funções prontas para validar CPF em 9 linguagens de programação.