# Cómo verificar un CPF brasileño

> Tres niveles para verificar un CPF de Brasil: dígitos verificadores, consulta de nombre y fecha de nacimiento, y situación ante la Receita Federal, con código.

**Publicado:** 13 de noviembre de 2026
**Autor:** Lucas Vieira
**URL:** https://www.cpfhub.io/es/blog/como-verificar-un-cpf-brasileno

---


## Introducción

Para verificar un CPF brasileño hay que responder tres preguntas distintas: si el número está bien formado, si existe y coincide con la persona, y si su situación ante la [Receita Federal](https://www.gov.br/receitafederal/pt-br/assuntos/orientacao-tributaria/cadastros/cpf) (la autoridad tributaria federal de Brasil) es regular. Cada pregunta tiene su propia validación, y confundirlas es el error más común de los equipos fuera de Brasil.

Un [CPF](/es/blog/que-es-el-cpf-de-brasil) (el número de identificación fiscal de personas físicas en Brasil) puede tener dígitos válidos y no existir. Puede existir y pertenecer a otra persona. Y puede pertenecer a la persona correcta y estar suspendido. A continuación verás los tres niveles, qué prueba cada uno y cómo implementarlos.

---

## Nivel 1: formato y dígitos verificadores

Un CPF tiene 11 dígitos. Los dos últimos son dígitos verificadores, calculados a partir de los nueve primeros con un algoritmo de módulo 11. Validarlos detecta errores de tipeo al instante y sin llamadas de red:

```javascript
function esCpfConFormatoValido(entrada) {
  const cpf = String(entrada).replace(/\D/g, '')
  if (cpf.length !== 11 || /^(\d)\1{10}$/.test(cpf)) return false

  const digito = (base) => {
    let suma = 0
    for (let i = 0; i < base.length; i++) suma += Number(base[i]) * (base.length + 1 - i)
    const resto = (suma * 10) % 11
    return resto === 10 ? 0 : resto
  }

  return digito(cpf.slice(0, 9)) === Number(cpf[9]) &&
    digito(cpf.slice(0, 10)) === Number(cpf[10])
}
```

**Lo que prueba:** que el número está bien escrito. **Lo que no prueba:** que el CPF exista o sea de tu usuario. Hay generadores de CPF con dígitos válidos a una búsqueda de distancia, así que esta validación sirve para la experiencia en el formulario, nunca como único control.

---

## Nivel 2: consulta de datos (¿existe el CPF y de quién es?)

El segundo nivel pregunta si el CPF existe y si el nombre y la fecha de nacimiento coinciden con lo que escribió el usuario. Es la validación que frena identidades inventadas o prestadas en el registro.

Con [**CPFHub.io**](/es), la Consulta Simple es una solicitud `GET` que devuelve el nombre, el género y la fecha de nacimiento del titular. Llámala desde tu backend, con la clave de API en una variable de entorno:

```python
import os
import requests

def consultar_cpf(cpf: str) -> dict | None:
    respuesta = requests.get(
        f"https://api.cpfhub.io/cpf/{cpf}",
        headers={
            "x-api-key": os.environ["CPFHUB_API_KEY"],
            "Accept": "application/json",
        },
        timeout=10,
    )
    if respuesta.status_code == 404:
        return None  # CPF no encontrado: no consume créditos
    respuesta.raise_for_status()
    return respuesta.json()["data"]

datos = consultar_cpf("00000000000")
if datos:
    print(datos["name"], datos["birthDate"])
```

Después compara el resultado con el formulario:

- **Nombre:** normaliza los dos lados (mayúsculas, sin acentos) y compáralos. Usa el campo `nameUpper` y ten en cuenta que muchos brasileños abrevian los apellidos del medio.
- **Fecha de nacimiento:** compárala de forma exacta. Una fecha distinta en un CPF real es una de las señales de fraude más fuertes que vas a tener.

Un CPF no encontrado devuelve 404 y no consume créditos. Un CPF con dígito verificador incorrecto devuelve 422, así que la API también te avisa de los errores del nivel 1.

> Nunca llames a la API desde el JavaScript del navegador. La clave de API debe quedarse en tu servidor: el frontend llama a una ruta propia (por ejemplo `/api/verificar-cpf`) y esa ruta llama a CPFHub.io.

---

## Nivel 3: situación de registro ante la Receita Federal

Algunos flujos necesitan algo más que la existencia del CPF. Crédito, retiros de montos altos y aperturas de cuenta reguladas suelen pedir la **situación de registro** del CPF ante la Receita Federal: regular, pendiente de regularización, suspendida, cancelada, nula o titular fallecido.

La [**Consulta en Tiempo Real**](/es/consulta-cpf-receita-federal) de CPFHub.io consulta la Receita Federal en el momento de la llamada. Necesita el CPF y la fecha de nacimiento del titular, y devuelve el nombre, la situación de registro (`situation`), el año de fallecimiento cuando lo hay (`deathYear`) y un enlace al comprobante emitido por la Receita Federal:

```bash
curl --max-time 60 -X POST https://api.cpfhub.io/cpf/realtime \
  -H "x-api-key: TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"cpf": "00000000000", "birthDate": "15/06/1990"}'
```

Como depende de la Receita Federal, usa un timeout generoso y, ante un 503, reintenta después del tiempo que indica el header `Retry-After`. Si la Receita Federal o CPFHub.io no responden (HTTP 502/503), no se cobra nada. Los campos y errores están en la [referencia de la Consulta en Tiempo Real](/es/documentacion/referencia/cpf-tiempo-real). Para una verificación manual y aislada, la Receita Federal tiene una [página pública de consulta](https://servicos.receita.fazenda.gov.br/servicos/cpf/consultasituacao/consultapublica.asp) con captcha.

---

## ¿Qué nivel necesitas?

| Flujo | Nivel 1 | Nivel 2 | Nivel 3 |
|---|---|---|---|
| Formulario de registro | Sí | Sí | Opcional |
| Checkout de un marketplace | Sí | Sí | No |
| Registro de repartidores o conductores | Sí | Sí | Recomendado |
| Apertura de cuenta en fintech o exchange | Sí | Sí | Recomendado, junto con documento y selfie |
| Crédito y retiros de montos altos | Sí | Sí | Sí |

En flujos regulados, combina la consulta del CPF con la verificación de documento y selfie. La [Verificación de Identidad](/es/verificacion-de-identidad) de CPFHub.io hace prueba de vida, comparación facial y lectura del documento con la misma clave de API.

Si llegas a Brasil desde otro país, piensa en cómo verificas hoy a tus usuarios locales. En México, por ejemplo, la CURP se puede [consultar en gob.mx](https://www.gob.mx/curp/). El CPF cumple un papel parecido en el registro, pero la verificación se hace contra los datos del titular, no solo contra el número. Las diferencias están en [CPF de Brasil vs CURP y RFC de México](/es/blog/cpf-vs-curp-rfc-mexico).

---

## Preguntas frecuentes

### ¿Basta con el algoritmo de dígitos verificadores para validar un CPF?

No. Solo detecta errores de tipeo. Los números generados lo pasan, así que necesitas una consulta que confirme que el CPF existe y pertenece a tu usuario.

### ¿Qué devuelve la API cuando el CPF no existe?

La Consulta Simple devuelve HTTP 404, y esa consulta no consume créditos. Un CPF con dígito verificador incorrecto devuelve 422.

### ¿Necesito la fecha de nacimiento para verificar un CPF?

No para la Consulta Simple, que solo necesita el CPF y te devuelve la fecha de nacimiento para comparar. La Consulta en Tiempo Real ante la Receita Federal exige el CPF y la fecha de nacimiento.

### ¿Puedo verificar miles de CPF a la vez?

Sí. El endpoint de lote acepta hasta 10.000 CPF por solicitud, y solo los CPF encontrados consumen créditos. Consulta la [consulta por lote](/es/consulta-cpf-en-lote).

---

### Lee también

- [¿Qué es el CPF de Brasil? Guía para empresas extranjeras](/es/blog/que-es-el-cpf-de-brasil)
- [Requisitos de KYC en Brasil para empresas extranjeras](/es/blog/requisitos-kyc-brasil)
- [API de verificación de identidad en Brasil: qué datos se obtienen con un CPF](/es/blog/api-verificacion-identidad-brasil)

## Conclusión

Verificar un CPF bien es una escalera: dígitos verificadores en el formulario, una consulta en el backend para confirmar que la persona existe y coincide, y la situación ante la Receita Federal cuando el riesgo lo justifica. Cada nivel responde una pregunta distinta, y la mayoría del fraude pasa cuando un equipo se queda en el primero.

Empieza con 50 créditos gratis y sin tarjeta en [cpfhub.io](/es), y revisa cada endpoint en la [documentación](/es/documentacion/inicio-rapido).

