Validar CUIT en Argentina: algoritmo, formato y API
Probalo — validá un CUIT
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 CUIT (Clave Única de Identificación Tributaria) es el identificador fiscal universal en Argentina. Lo emite AFIP (ahora ARCA) y lo necesita cualquier persona o empresa que opere dentro del sistema tributario argentino. Si estas construyendo un sistema de facturación, un flujo de onboarding para empresas argentinas, o una integracion con AFIP, validar el CUIT correctamente es uno de los primeros problemas que vas a tener que resolver. Esta guia cubre la estructura, los prefijos, el algoritmo de digito verificador con un ejemplo numerico completo, y como validar CUITs en produccion usando la API de Normadata.
Que es el CUIT
El CUIT es el número de identificación fiscal de Argentina, equivalente al RFC en México o el EIN en Estados Unidos. Se usa en facturas, declaraciones impositivas, inscripciones en registros públicos, y transacciones bancarias. Toda empresa registrada en Argentina tiene un CUIT. Las personas fisicas que trabajan en relacion de dependencia o de forma autonoma tambien tienen uno asignado. A diferencia del DNI (Documento Nacional de Identidad), el CUIT incluye un prefijo de tipo y un digito verificador, lo que permite validarlo matematicamente sin consultar ninguna base de datos externa.
El CUIL (Clave Única de Identificación Laboral) usa exactamente el mismo formato y el mismo algoritmo que el CUIT. La diferencia es administrativa: el CUIL se usa en sistemas laborales y de seguridad social, el CUIT en sistema impositivo. Para propositos de validación, son identicos.
Estructura del CUIT
Un CUIT tiene 11 digitos escritos en el formato XX-XXXXXXXX-X, divididos en tres partes:
- Prefijo (2 digitos): indica el tipo de entidad
- Cuerpo (8 digitos): el DNI de la persona o un número asignado por AFIP para empresas
- Digito verificador (1 digito): calculado con el algoritmo modulo 11
Los prefijos posibles son: 20 (persona fisica masculina), 23 (masculina alternativa), 24 (masculina segunda alternativa), 27 (persona fisica femenina), 30 (persona juridica / empresa), 33 (juridica alternativa), 34 (juridica segunda alternativa). Los prefijos alternativos (23, 24, 33, 34) existen para los casos en que el prefijo primario produce un digito verificador igual a 10, que es invalido segun el algoritmo.
El algoritmo modulo 11
El digito verificador del CUIT se calcula con el algoritmo modulo 11. Funciona asi:
- Escribir los 10 primeros digitos del CUIT (prefijo + cuerpo).
- Asignar los pesos [5, 4, 3, 2, 7, 6, 5, 4, 3, 2] a cada posicion respectivamente.
- Multiplicar cada digito por su peso correspondiente.
- Sumar todos los productos.
- Calcular el resto de la suma dividida por 11 (sum mod 11).
- Restar el resto a 11: check = 11 - (sum mod 11).
- Si el resultado es 11, el digito verificador es 0.
- Si el resultado es 10, el CUIT es invalido con ese prefijo (AFIP lo re-emite con uno alternativo).
Ejemplo completo con 20-31456789-?. Digitos: 2, 0, 3, 1, 4, 5, 6, 7, 8, 9. Pesos: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2. Productos: 10, 0, 9, 2, 28, 30, 30, 28, 24, 18. Suma: 179. 179 mod 11 = 3. 11 - 3 = 8. El CUIT completo es 20-31456789-8.
Errores comunes en produccion
Estos son los problemas más frecuentes que encontramos en integraciones reales:
- Tratar el CUIT como entero — Al convertirlo a número se pierden ceros iniciales del cuerpo. Siempre almacenar y transmitir como string.
- No normalizar los separadores — Los sistemas almacenan CUITs con guiones, sin guiones, con espacios, o con puntos. Siempre remover caracteres no numericos antes de validar.
- Asumir que prefijo 20 = masculino y 30 = empresa — Los prefijos alternativos (23, 24, 33, 34) son validos y frecuentes. No rechazar un CUIT solo porque su prefijo no es 20 o 30.
- No manejar el resultado 10 — Si el algoritmo produce 10 como check, no es que el digito verificador sea 10. El CUIT es invalido con ese prefijo.
- Confundir CUIT con CUIL — Son validados con el mismo algoritmo pero existen en sistemas separados. Un número valido como CUIL es valido como CUIT matematicamente.
Validar CUIT con la API de Normadata
En lugar de implementar el algoritmo manualmente y manejar todos los edge cases, podes validar CUITs con una sola llamada a la API de Normadata. La API normaliza el input, verifica el formato y el checksum, y devuelve metadatos estructurados incluyendo el tipo de entidad y el valor formateado.
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": "20-31456789-8",
"country": "AR",
"type": "cuit"
}import requests
response = requests.post(
"https://api.normadata.io/v1/validate/tax-ids",
headers={"X-API-Key": "nd_tu_clave"},
json={
"value": "20-31456789-8",
"country": "AR",
"type": "cuit"
}
)
data = response.json()
print(data["valid"]) # True{
"valid": true,
"country": "AR",
"type": "cuit",
"value": {
"raw": "20314567898",
"formatted": "20-31456789-8"
},
"metadata": {
"prefix": "20",
"entity_type": "persona_fisica_masculino",
"dni": "31456789",
"check_digit": "8"
}
}Proximos pasos
Ahora que entendes la estructura y el algoritmo del CUIT, podes integrarlo en tu flujo de onboarding, sistema de facturación, o pipeline de compliance. La API de Normadata cubre no solo el CUIT sino tambien CUIL, CBU, y otros identificadores argentinos, ademas de los tax IDs 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.