RFC vs CURP en México: cuando usar cada uno
Si estas construyendo un producto para el mercado mexicano, tarde o temprano vas a necesitar trabajar con dos identificadores: el RFC y el CURP. Son similares en apariencia — ambos son cadenas alfanumericas derivadas del nombre y fecha de nacimiento de la persona — pero sirven propositos completamente distintos y son emitidos por autoridades diferentes. Esta guia explica la estructura de cada uno, cuando necesitas uno vs el otro, y como validarlos en produccion.
RFC: el identificador fiscal
El RFC (Registro Federal de Contribuyentes) es emitido por el SAT (Servicio de Administración Tributaria) y es el identificador fiscal de México. Lo necesitas para emitir y recibir facturas (CFDI), declarar impuestos, abrir cuentas bancarias empresariales, y cualquier transaccion formal en el sistema tributario mexicano.
Estructura del RFC para persona fisica (individual): 4 letras derivadas del nombre y apellidos + 6 digitos de fecha de nacimiento (AAMMDD) + 3 caracteres de homoclave asignados por SAT. Total: 13 caracteres. Ejemplo: LOEM800101ABC. Para persona moral (empresa): 3 letras del nombre de la empresa + 6 digitos de fecha de constitucion (AAMMDD) + 3 caracteres de homoclave. Total: 12 caracteres. Ejemplo: SAT901114Q28. La homoclave la asigna el SAT — no se puede calcular de forma independiente sin el algoritmo completo del registro, aunque algunos sistemas lo intentan aproximar.
CURP: el identificador de identidad civil
El CURP (Clave Única de Registro de Población) es emitido por RENAPO (Registro Nacional de Población) y es el identificador de identidad civil de México, no un identificador fiscal. Tiene siempre 18 caracteres alfanumericos y se asigna a todas las personas nacidas o naturalizadas en México.
Estructura del CURP (siempre 18 caracteres): 4 letras del nombre (apellido paterno, apellido materno, primer nombre) + 6 digitos de fecha de nacimiento (AAMMDD) + 1 letra de sexo (H/M) + 2 letras del estado de nacimiento + 3 consonantes del nombre + 2 caracteres de diferenciadores + 1 digito verificador. Ejemplo: LOEM800101HDFLNS09. El digito verificador es calculado con un algoritmo propio de RENAPO.
Tabla comparativa
Las diferencias clave entre RFC y CURP:
- Autoridad: RFC -> SAT (impuestos) | CURP -> RENAPO (identidad civil)
- Propósito: RFC -> tributario, facturación | CURP -> identidad, gobierno
- Personas físicas: RFC -> 13 chars | CURP -> 18 chars siempre
- Personas morales: RFC -> 12 chars | CURP -> no aplica (solo personas físicas)
- Extranjeros: RFC -> con o sin CURP | CURP -> con clave de estado XX para extranjeros
- Obligatorio para facturar: RFC -> sí | CURP -> no
- Obligatorio para trámites civiles: RFC -> no | CURP -> sí
Cuando necesitas el RFC vs el CURP
La regla es simple: si el flujo involucra impuestos, facturación, o el SAT — necesitas el RFC. Si el flujo involucra identidad civil, seguridad social, salud, o educacion — necesitas el CURP. En muchos sistemas gubernamentales y bancarios, se solicitan ambos.
- Necesitas RFC: emitir CFDI (facturas electronicas), onboarding de clientes para cumplimiento fiscal, apertura de cuentas bancarias empresariales, nómina formal, declaraciones impositivas.
- Necesitas CURP: verificación de identidad en seguro social (IMSS/ISSSTE), tramites de pasaporte, inscripción en instituciones educativas, acceso a programas de gobierno, identificación de empleados en nómina.
- Necesitas ambos: apertura de cuentas bancarias personas fisicas, sistemas de nómina completos, KYC con verificación de identidad y fiscal, plataformas de trabajo formal.
Validar RFC y CURP con la API de Normadata
Podes validar tanto el RFC como el CURP con un endpoint consistente de la API de Normadata, pasando el tipo correspondiente en cada llamada.
curl -X POST https://api.normadata.io/v1/validate/tax-ids \
-H "X-API-Key: nd_tu_clave" \
-H "Content-Type: application/json" \
-d {
"value": "LOEM800101ABC",
"country": "MX",
"type": "rfc"
}curl -X POST https://api.normadata.io/v1/validate/tax-ids \
-H "X-API-Key: nd_tu_clave" \
-H "Content-Type: application/json" \
-d {
"value": "LOEM800101HDFLNS09",
"country": "MX",
"type": "curp"
}{
"valid": true,
"country": "MX",
"type": "rfc",
"value": {
"raw": "LOEM800101ABC",
"formatted": "LOEM800101ABC"
},
"metadata": {
"entity_type": "persona_fisica",
"birthdate": "1980-01-01",
"homoclave": "ABC"
}
}Proximos pasos
Si tu producto opera en México, revisar la cobertura completa de identificadores mexicanos en /coverage. La API de Normadata valida RFC, CURP, y los demas identificadores de LATAM con el mismo endpoint. Para integrarte, unirte a la lista de espera en /waitlist. Si trabajas con identificadores de otros países de la region, leer la guia completa de tax IDs de LATAM en /blog/latam-tax-ids-developer-guide.