Dígito verificador CUIT/CUIL Argentina
Escriba 20-12345678 y obtendrá el dígito verificador 6, de modo que el CUIT completo es 20-12345678-6; si teclea 20-12345678-7, la validación falla. Detecta errores de tecleo en facturas, altas de proveedores y nóminas antes de que causen problemas. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- CUIT
- 20-12345678
- Modo de cálculo
- Compute
- Entrada
- 2012345678
- Dígito de control
- 6
- Con dígito de control
- 20123456786
Los números CUIT y CUIL identifican a personas y empresas en flujos fiscales, de nómina y bancarios en Argentina. Cada código de once dígitos termina con un dígito de control derivado de una ponderación fija de los primeros diez dígitos según la regla de la AFIP (Administración Federal de Ingresos Públicos). Un dígito del cuerpo mal escrito o un par intercambiado suele romper esa suma de control, de modo que validar el dígito verificador antes de emitir una factura, abrir un proveedor o aceptar un archivo de nómina detecta muchos errores de tecleo a tiempo. Esta capacidad calcula el dígito verificador CUIT/CUIL a partir de una carga de diez dígitos (con o sin guiones habituales), o valida un número completo de once dígitos que ya incluye el dígito final, e informa la entrada incorrecta en lugar de eliminar en silencio letras o puntuación.
Qué es el dígito verificador CUIT/CUIL argentino y cómo funcionan los pesos
Un CUIT (Clave Única de Identificación Tributaria) o CUIL (Clave Única de Identificación Laboral) es un identificador de once dígitos usado en sistemas fiscales, de seguridad social, bancarios y comerciales de Argentina. La forma impresa suele ser XX-XXXXXXXX-X: un prefijo de tipo de dos dígitos, un cuerpo de ocho dígitos (a menudo un número de documento) y un dígito verificador final.
Ese último dígito no es decorativo: se calcula de modo que una suma ponderada de los primeros diez dígitos, con los multiplicadores fijos cinco, cuatro, tres, dos, siete, seis, cinco, cuatro, tres y dos de izquierda a derecha, produzca un valor cuyo resto módulo once determine el control. Tras sumar dígito por peso en cada posición, el algoritmo toma once menos (suma módulo once).
Si el resultado es once el dígito de control es cero; si es diez el dígito es nueve; en caso contrario el resultado es el propio dígito. Cuando alguien escribe 20-12345678-6 como 20-12345678-7, la suma ya no coincide y la validación falla. La misma regla detecta muchas sustituciones de un solo dígito en importaciones ERP, pasarelas de facturación electrónica y formularios de alta de RR.
HH. donde los operadores reescriben números desde papel o PDF. Esta herramienta aplica esa ponderación estándar AFIP sobre dígitos puros tras quitar guiones opcionales. No consulta a la AFIP, no demuestra que exista un contribuyente ni asigna un código de tipo: solo comprueba que la cadena de dígitos es coherente con el algoritmo de control publicado.
Frente al Luhn mod-10 de tarjetas y cuentas generales, el esquema CUIT usa un vector de pesos fijo de izquierda a derecha y módulo once, de modo que no debe reutilizar un validador Luhn en campos CUIT. Frente a ayudas de CPF brasileño o RFC mexicano, la regla argentina es específica de este diseño de once dígitos y estos diez multiplicadores. Saber qué esquema necesita evita una falsa confianza cuando una utilidad genérica de dígito de control acepta una cadena que no es un CUIT o CUIL bien formado.
Dónde encajan los dígitos verificadores CUIT en flujos fiscales, de nómina y comerciales
Los sistemas de facturación electrónica y de cobro guardan el CUIT del cliente o proveedor en cada documento legal; un solo dígito mal escrito en el alta puede enviar XML fiscal a la parte equivocada o fallar después la autorización AFIP. Las plataformas de nómina y RR. HH. asocian un CUIL a cada empleado; la importación masiva de archivos de documento nacional suele producir errores de un dígito que el control detecta antes de la primera liquidación.
Bancos y pasarelas de pago que aceptan identificadores fiscales argentinos para KYC o metadatos de transferencia pueden recomputar el dígito sin llamar a un registro externo, filtrando ruido OCR y capturas parciales de forma temprana. Los equipos de producto que ya exponen herramientas generales Luhn o ISO 7064 deben usar aún esta capacidad específica de CUIT en campos de identificación fiscal argentina para que pesos, límites de longitud y formato de guiones coincidan con el dominio.
No trate un dígito verificador CUIT correcto como prueba de que la persona o empresa está bien identificada, activa en la AFIP, autorizada a facturar o presente en un registro oficial: solo demuestra que la cadena de dígitos es coherente con el algoritmo de control CUIT/CUIL argentino.
Qué puede hacer con ella
Auditar columnas CUIT en archivos de socios y nómina
Valide por lotes cada CUIT/CUIL de una importación CSV y aísle las filas cuyo dígito de control ya no coincida con el valor esperado recomputado.
Preguntas frecuentes
¿Qué es el dígito verificador CUIT/CUIL argentino?
Es un dígito final único calculado con los pesos AFIP 5,4,3,2,7,6,5,4,3,2 sobre los primeros diez dígitos y luego módulo 11 (11 se mapea a 0 y 10 a 9), de modo que la mayoría de errores de un solo dígito rompen la suma de control.
¿Qué ocurre con letras, espacios o longitud incorrecta?
Proporcione solo dígitos 0-9 (guiones opcionales); compute exige diez dígitos y validate once. Las tareas de validación fallidas no se facturan.
¿Es gratuita la herramienta de dígito verificador CUIT?
La herramienta del navegador es gratuita y se ejecuta en local.
¿Qué pasa cuando el cálculo da 10 u 11?
La regla resta de 11 el resto de dividir la suma ponderada entre 11. Si el resultado es 11, el dígito verificador es 0; si es 10, pasa a ser 9; cualquier otro resultado es el propio dígito.
¿Un CUIT válido demuestra que el contribuyente existe?
No. La herramienta no consulta a la AFIP ni ningún padrón de contribuyentes, y tampoco asigna el prefijo de tipo. Un dígito correcto solo indica que las cifras son coherentes con la regla publicada.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/enc/cuit-argentina \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"cuit":"20-12345678"}'const res = await fetch("https://api.kit.forhosting.com/enc/cuit-argentina", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"cuit": "20-12345678"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/cuit-argentina",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"cuit": "20-12345678"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/cuit-argentina", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"cuit":"20-12345678"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"cuit":"20-12345678"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/cuit-argentina", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"cuit": "20-12345678"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.cuit_argentina",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Úselo gratis en el navegador o llame a la API de KIT al precio publicado; ambas rutas ejecutan la misma aritmética determinista sin consulta de red y sin registro de contribuyentes reales.
Cómo calcular un dígito verificador o validar un CUIT/CUIL completo
Envíe un campo cuit con dígitos del cero al nueve, opcionalmente separados por los guiones estándar. El modo validate espera un número completo de once dígitos con el dígito de control final (por ejemplo 20-12345678-6 o 20123456786). Cadenas vacías, cuit ausente, valores de mode inválidos y longitudes incorrectas (no diez dígitos en compute, no once en validate) fallan antes de cualquier suma ponderada y no se facturan. Prefiera compute cuando ensamble un CUIT a partir de un prefijo de tipo y un cuerpo de documento conocidos; prefiera validate cuando un usuario, un archivo de socio o una etiqueta escaneada aporte un número completo y necesite un filtro booleano antes de una consulta a la AFIP o a datos maestros internos. Los espacios alrededor del valor se recortan; letras, otra puntuación, guiones dobles o guiones al inicio o al final se rechazan como entrada mal formada con invalid_input para que nunca acepte un valor limpiado en silencio. El modo compute es el predeterminado: proporcione exactamente diez dígitos sin el dígito de control (por ejemplo 20-12345678 o 2012345678) y el motor devuelve check_digit como cadena de un carácter, with_check como la cadena completa de once dígitos incluyendo ese dígito, y formatted en la forma con guiones XX-XXXXXXXX-X usada en facturas y formularios. La respuesta indica valid true cuando el dígito recomputado coincide con el último, e incluye siempre check_digit, expected_check_digit, payload sin el último dígito y formatted para una visualización coherente. Como la ruta es parse puro, sin reloj, fuente aleatoria ni red, la misma entrada produce siempre el mismo JSON en la herramienta gratuita del navegador y en la API. A $0.002 por solicitud exitosa puede filtrar importaciones masivas de proveedores, formularios de alta y trabajos ETL sin negociar un tramo a medida.
Dónde encajan los dígitos verificadores CUIT en flujos fiscales, de nómina y comerciales
El modo validate a la entrada bloquea el guardado cuando valid es false y puede mostrar expected_check_digit para que el operador corrija el formulario antes de escribir el registro. En todo flujo el contrato es el mismo: dígitos con guiones opcionales, compute o validate, JSON estructurado que puede probarse con goldens, comportamiento idéntico gratis en el navegador o con saldo KIT prepago, y fallo honesto cuando la entrada está mal formada.
Casos de integración
Filtrar campos CUIT en formularios de proveedores y clientes
Cuando un usuario envíe un CUIT completo, llame al modo validate y bloquee el guardado si valid es false, mostrando expected_check_digit para corregir un solo error de tecleo antes de escribir el registro ERP.
Calcular dígitos de control al crear o completar identificadores
A partir de un prefijo de tipo y un cuerpo de ocho dígitos, llame al modo compute y almacene with_check o formatted para que cada nueva cadena CUIT/CUIL lleve el dígito final correcto antes de imprimir o exportar.
Preguntas técnicas
¿Cómo calculo un dígito verificador CUIT con esta API?
Haga POST con cuit igual a los diez dígitos de carga (guiones opcionales) y mode compute (o omita mode). La respuesta incluye check_digit, with_check y formatted como XX-XXXXXXXX-X.
¿Cómo valido un CUIT o CUIL completo?
Haga POST con la cadena completa de once dígitos y mode validate. La respuesta incluye valid, check_digit, expected_check_digit, payload y formatted.