Validación de CPF: algoritmo, ejemplos y API REST
Probalo — validá un CPF
La validación corre en tu navegador. Ningún dato sale de tu dispositivo.
Valida localmente — tus datos nunca salen de tu navegador. Sin tracking sobre el input.
El CPF (Cadastro de Pessoas Físicas) es el número de identificación fiscal de Brasil para personas físicas, emitido por la Receita Federal. Si estás construyendo un producto que atiende a usuarios o empresas brasileñas — un sistema de pagos, un flujo de onboarding, o una integración con NF-e — validar CPFs correctamente es uno de los primeros requisitos que tu backend tiene que resolver. Esta guía cubre la estructura completa del CPF, el algoritmo de dígitos verificadores por módulo 11 ponderado en dos pasos con un ejemplo numérico, los casos especiales inválidos, y cómo validar CPFs en producción usando la API de Normadata.
Qué es el CPF
El CPF es emitido por la Receita Federal do Brasil e identifica de forma única a cada ciudadano o residente para fines fiscales. Se usa en declaraciones de impuestos, apertura de cuentas bancarias, contratos, facturas, y prácticamente en toda transacción económica formal en Brasil. El número es vitalicio — no vence ni cambia, salvo en casos excepcionales de fraude documentado. Las empresas usan el CNPJ (Cadastro Nacional da Pessoa Jurídica), que tiene una estructura y un algoritmo distintos.
Estructura del CPF
Un CPF tiene 11 dígitos en el formato XXX.XXX.XXX-DD, divididos en dos partes:
- Base (9 dígitos): identifican al contribuyente. Los primeros tres dígitos indican la región fiscal de emisión (no es un indicador confiable de la ubicación actual).
- Dígitos verificadores (2 dígitos): calculados a partir de la base mediante un algoritmo de módulo 11 ponderado en dos pasos.
La representación formateada usa puntos y un guión. Para la transmisión y la validación, siempre normalizar eliminando toda puntuación, resultando en 11 dígitos numéricos.
El algoritmo de validación
La validación del CPF usa dos pasos consecutivos de módulo 11 ponderado para calcular cada dígito verificador.
- PASO 1 — Calcular el primer dígito verificador (D1):
- - Tomar los 9 dígitos de la base.
- - Multiplicar por los pesos [10, 9, 8, 7, 6, 5, 4, 3, 2].
- - Sumar los productos.
- - Calcular: resto = suma mod 11.
- - Si resto < 2, entonces D1 = 0. Si no, D1 = 11 - resto.
- PASO 2 — Calcular el segundo dígito verificador (D2):
- - Tomar los 9 dígitos de la base más D1 (10 dígitos en total).
- - Multiplicar por los pesos [11, 10, 9, 8, 7, 6, 5, 4, 3, 2].
- - Sumar los productos.
- - Calcular: resto = suma mod 11.
- - Si resto < 2, entonces D2 = 0. Si no, D2 = 11 - resto.
Ejemplo con 111.444.777-35. Base: 1,1,1,4,4,4,7,7,7. Paso 1: pesos [10,9,8,7,6,5,4,3,2] -> productos [10,9,8,28,24,20,28,21,14] -> suma = 162 -> 162 mod 11 = 8 -> 11 - 8 = 3 -> D1 = 3. Paso 2: base + D1 = [1,1,1,4,4,4,7,7,7,3], pesos [11,10,9,8,7,6,5,4,3,2] -> productos [11,10,9,32,28,24,35,28,21,6] -> suma = 204 -> 204 mod 11 = 6 -> 11 - 6 = 5 -> D2 = 5. CPF válido: 111.444.777-35.
Casos especiales inválidos
Hay casos en que el algoritmo produce dígitos verificadores correctos pero el CPF sigue siendo inválido:
- Los CPFs con todos los dígitos iguales son inválidos por definición: de 000.000.000-00 a 999.999.999-99. Pasan el algoritmo pero la Receita Federal nunca los emite. Todo validador correcto debe rechazarlos explícitamente.
- Los CPFs con menos de 11 dígitos después de eliminar los separadores son inválidos. Algunos sistemas descartan los ceros a la izquierda — nunca tratar un CPF como un entero.
Validar el CPF con la API de Normadata
En lugar de implementar el algoritmo vos mismo, podés validar CPFs con una sola llamada a la API de Normadata. La API normaliza el input, verifica el formato y ambos dígitos verificadores, rechaza los casos especiales inválidos, y devuelve metadatos estructurados.
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 pasos
Ahora que entendés la estructura y el algoritmo del CPF, podés integrarlo en tu flujo de onboarding o sistema de pagos. La API de Normadata cubre no solo el CPF sino también el CNPJ (empresas) e identificadores de 8 otros países sudamericanos con el mismo endpoint consistente. Ver la cobertura completa en /coverage o unirse a la lista de espera en /waitlist para obtener acceso a la API.