Validação de CPF: Algoritmo, Exemplos e API REST
Teste — valide um CPF
A validação roda no seu navegador. Nenhum dado sai do seu dispositivo.
Valida localmente — seus dados nunca saem do navegador. Sem rastreamento do input.
O CPF (Cadastro de Pessoas Físicas) é o número de identificação fiscal do Brasil para pessoas naturais, emitido pela Receita Federal. Se você está desenvolvendo um produto que atende usuários ou empresas brasileiras — um sistema de pagamentos, um fluxo de onboarding ou uma integração com NF-e — validar CPFs corretamente é um dos primeiros requisitos que seu backend deve atender. Este guia cobre a estrutura completa do CPF, o algoritmo de dígito verificador módulo 11 em dois passos com um exemplo resolvido, casos especiais inválidos e como validar CPFs em produção usando a API da Normadata.
O que é o CPF
O CPF é emitido pela Receita Federal do Brasil e identifica de forma única cada cidadão ou residente para fins fiscais. É usado em declarações de imposto de renda, abertura de contas bancárias, contratos, faturas e praticamente toda transação econômica formal no Brasil. O número é vitalício — não expira e não muda, exceto em casos excepcionais de fraude documentada. Empresas usam o CNPJ (Cadastro Nacional da Pessoa Jurídica), que tem uma estrutura e algoritmo distintos.
Estrutura do CPF
Um CPF tem 11 dígitos no formato XXX.XXX.XXX-DD, dividido em duas partes:
- Base (9 dígitos): identifica o contribuinte. Os três primeiros dígitos indicam a região fiscal de emissão (não é um indicador confiável da localização atual).
- Dígitos verificadores (2 dígitos): calculados a partir da base por um algoritmo ponderado de módulo 11 em dois passos.
A exibição formatada usa pontos e um hífen. Para transmissão e validação, normalize sempre removendo toda pontuação, resultando em 11 dígitos numéricos.
O algoritmo de validação
A validação do CPF usa dois passos consecutivos de módulo 11 ponderado para calcular cada dígito verificador.
- PASSO 1 — Calcular o primeiro dígito verificador (D1):
- - Pegue os 9 dígitos de base.
- - Multiplique pelos pesos [10, 9, 8, 7, 6, 5, 4, 3, 2].
- - Some os produtos.
- - Calcule: resto = soma mod 11.
- - Se resto < 2, então D1 = 0. Caso contrário, D1 = 11 - resto.
- PASSO 2 — Calcular o segundo dígito verificador (D2):
- - Pegue os 9 dígitos de base mais D1 (10 dígitos no total).
- - Multiplique pelos pesos [11, 10, 9, 8, 7, 6, 5, 4, 3, 2].
- - Some os produtos.
- - Calcule: resto = soma mod 11.
- - Se resto < 2, então D2 = 0. Caso contrário, D2 = 11 - resto.
Exemplo resolvido com 111.444.777-35. Base: 1,1,1,4,4,4,7,7,7. Passo 1: pesos [10,9,8,7,6,5,4,3,2] -> produtos [10,9,8,28,24,20,28,21,14] -> soma = 162 -> 162 mod 11 = 8 -> 11 - 8 = 3 -> D1 = 3. Passo 2: base + D1 = [1,1,1,4,4,4,7,7,7,3], pesos [11,10,9,8,7,6,5,4,3,2] -> produtos [11,10,9,32,28,24,35,28,21,6] -> soma = 204 -> 204 mod 11 = 6 -> 11 - 6 = 5 -> D2 = 5. CPF válido: 111.444.777-35.
Casos especiais inválidos
Existem casos onde o algoritmo produz dígitos verificadores corretos, mas o CPF ainda é inválido:
- CPFs com todos os dígitos idênticos são inválidos por definição: 000.000.000-00 a 999.999.999-99. Esses passam pelo algoritmo, mas nunca são emitidos pela Receita Federal. Qualquer validador correto deve rejeitá-los explicitamente.
- CPFs com menos de 11 dígitos após remover os separadores são inválidos. Alguns sistemas removem zeros à esquerda — nunca trate um CPF como inteiro.
Validando CPF com a API da Normadata
Em vez de implementar o algoritmo você mesmo, é possível validar CPFs com uma única chamada de API à Normadata. A API normaliza a entrada, verifica o formato e ambos os dígitos verificadores, rejeita casos especiais inválidos e retorna metadados estruturados.
curl -X POST https://api.normadata.io/v1/validate/tax-ids \
-H "X-API-Key: nd_your_key_here" \
-H "Content-Type: application/json" \
-d {
"value": "111.444.777-35",
"country": "BR",
"type": "cpf"
}import requests
response = requests.post(
"https://api.normadata.io/v1/validate/tax-ids",
headers={"X-API-Key": "nd_your_key_here"},
json={
"value": "111.444.777-35",
"country": "BR",
"type": "cpf"
}
)
data = response.json()
print(data["valid"]) # True{
"valid": true,
"country": "BR",
"type": "cpf",
"value": {
"raw": "11144477735",
"formatted": "111.444.777-35"
},
"metadata": {
"check_digits": "35",
"entity_type": "pessoa_fisica"
}
}Próximos passos
Agora que você entende a estrutura e o algoritmo do CPF, pode integrá-lo ao seu fluxo de onboarding ou sistema de pagamentos. A API da Normadata cobre não apenas o CPF, mas também o CNPJ (empresas) e identificadores fiscais de 8 outros países sul-americanos pelo mesmo endpoint consistente. Veja a cobertura completa em /coverage ou entre na lista de espera em /waitlist para obter acesso à API.