API para validar RFC y CURP en México
Validá RFC (persona física o moral) y CURP por API REST con un solo endpoint. Formato + homoclave + dígito verificador según especificación SAT. Mismo schema que el resto de LatAm.
Validar RFC persona física
$ curl -X POST https://api.normadata.io/v1/verify/validate \
-H "X-API-Key: nd_your_key" \
-d '{"country":"MX","type":"rfc","value":"VECJ880326XXX"}'
{
"valid": true,
"normalized": "VECJ880326XXX",
"type": "RFC",
"category": "tax_id",
"subtype": "persona_fisica"
}Validar CURP
$ curl -X POST https://api.normadata.io/v1/verify/validate \
-H "X-API-Key: nd_your_key" \
-d '{"country":"MX","type":"curp","value":"VECJ880326HDFLRR04"}'
{
"valid": true,
"normalized": "VECJ880326HDFLRR04",
"type": "CURP",
"category": "identity"
}RFC y CURP: para qué sirve cada uno
México tiene dos identificadores principales para personas:
- RFC (Registro Federal de Contribuyentes) — identificador fiscal emitido por el SAT. Hay dos formatos:
- Persona física: 13 caracteres. 4 letras (iniciales del nombre y apellidos) + 6 dígitos (fecha de nacimiento aammdd) + 3 caracteres alfanuméricos (homoclave).
- Persona moral / empresa: 12 caracteres. 3 letras (iniciales de la razón social) + 6 dígitos (fecha de constitución) + 3 alfanuméricos (homoclave).
- CURP (Clave Única de Registro de Población) — 18 caracteres. Identifica a toda persona registrada en México (no solo contribuyentes). Estructura específica que incluye iniciales, fecha de nacimiento, género, entidad federativa de nacimiento, consonantes internas y un dígito verificador.
Cómo se valida un RFC
La validación de RFC tiene tres partes:
- Formato estructural: 12 o 13 caracteres alfanuméricos, con las posiciones correctas para letras y dígitos.
- Fecha válida: los 6 dígitos del medio tienen que representar una fecha real (aammdd). No puede haber 31 de febrero.
- Homoclave válida: los últimos 3 caracteres son alfanuméricos con un dígito verificador final calculado por una tabla específica del SAT que asigna valores numéricos a cada carácter.
Cómo se valida un CURP
El CURP es más estricto porque codifica información demográfica:
- Formato: 18 caracteres con posiciones específicas para letras y dígitos.
- Posiciones 1-4:iniciales del nombre y apellidos (con reglas específicas para nombres con "Ñ", palabras inconvenientes filtradas por el RENAPO).
- Posiciones 5-10: fecha de nacimiento (aammdd).
- Posición 11: H o M (género).
- Posiciones 12-13: código de 2 letras de la entidad federativa.
- Posiciones 14-16: primera consonante interna del nombre y apellidos.
- Posición 17: dígito de homonimia.
- Posición 18: dígito verificador final.
Si querés implementar esto en código propio, es viable pero hay muchas reglas ortográficas y excepciones (palabras inconvenientes, nombres compuestos, etc.) que hacen el mantenimiento tedioso.
Qué hace y qué NO hace esta API
Sí hace
- Valida formato del RFC/CURP
- Verifica fecha embebida
- Calcula y verifica homoclave/DV
- Detecta persona física vs moral
- Soporta también CLABE (cuentas bancarias MX)
NO hace
- NO consulta el padrón SAT
- NO confirma que el RFC esté activo
- NO devuelve nombre/razón social
- NO devuelve situación fiscal ni régimen
- NO valida CURP contra RENAPO
Casos de uso típicos en México
- Onboarding en apps fintech, marketplaces y plataformas reguladas por la CNBV.
- Facturación electrónica (CFDI) — validar RFC del receptor antes de emitir el comprobante.
- Compliance KYC como capa inicial — la API valida estructura, el siguiente paso (validación contra padrón) lo hace un proveedor regulado.
- Sistemas de RRHH/nómina al cargar empleados con RFC y CURP.
- Apps multi-país LatAm que necesitan un solo schema para MX (RFC, CURP, CLABE), BR (CPF, CNPJ), AR (CUIT, CBU), CL (RUT), etc.
También CLABE
Para validar cuentas bancarias mexicanas (CLABE — 18 dígitos con dígito verificador), la misma API soporta type: "clabe". Mismo schema. Para devs construyendo apps con flujo de pagos en México, esto cubre identidad + bancario en el mismo endpoint.
FAQ
Preguntas frecuentes sobre la API de validación RFC/CURP
¿La API consulta SAT o RENAPO?
No. Solo valida formato, homoclave y dígito verificador según especificación pública. NO consulta SAT, no devuelve situación fiscal, régimen, ni si el RFC está activo. Para registry-lookup necesitás un proveedor regulado.
¿Distingue RFC persona física vs moral automáticamente?
Sí. Por la longitud (13 chars persona física, 12 chars persona moral) y por el formato de los primeros caracteres. El response incluye un campo subtype con persona_fisica o persona_moral.
¿Soporta RFC genérico (XAXX010101000)?
Sí. El SAT define dos RFCs genéricos (uno para extranjeros XEXX010101000, otro para población general XAXX010101000) que se aceptan en facturación cuando el contribuyente no tiene RFC. La API los reconoce como válidos.
¿Valida CURP contra padrón RENAPO?
No. RENAPO es un padrón al que la API no accede. Esta API valida la estructura, fecha embebida, género, entidad federativa y dígito verificador del CURP. Si el CURP es estructuralmente correcto pero no existe en RENAPO, devuelve valid: true (porque solo verifica matemática).
¿Cubre CLABE y otros identificadores mexicanos?
Sí. La API soporta RFC, CURP y CLABE (cuentas bancarias) en México, todos en el mismo endpoint /v1/verify/validate. Schema consistente con el resto de LatAm.
¿Cómo obtengo acceso?
Normadata está en beta privada. Solicitando acceso en normadata.io con tu caso de uso. El equipo prioriza casos con tracción real (fintech mexicana, marketplaces multi-país, herramientas de operaciones que necesitan validación a escala).
Validá RFC, CURP, CLABE y más con Normadata
Beta privada. Sumate a la lista de espera para recibir tu API key.