Calcular CUIT desde DNI
Guía completa con JavaScript y ejemplos prácticos
¿Qué es el CUIT?
El CUIT (Clave Única de Identificación Tributaria) es un número identificatorio que utiliza la AFIP en Argentina para identificar de manera única a las personas físicas y jurídicas en sus relaciones con el organismo. Se compone de 11 dígitos organizados en tres partes: XX-XXXXXXXX-X.
- Prefijo (2 dígitos): Identifica el tipo de persona
- DNI (8 dígitos): Número de documento
- Verificador (1 dígito): Dígito de control
Prefijos del CUIT
Los prefijos más comunes son:
- 20: Personas físicas masculinas
- 23: Personas físicas masculinas o femeninas (alternativo)
- 24: Personas físicas (con documento repetido)
- 27: Personas físicas femeninas
- 30: Personas jurídicas (empresas, sociedades)
- 33: Personas jurídicas (casos especiales)
- 34: Personas jurídicas (con documento repetido)
Algoritmo de Cálculo
El dígito verificador se calcula mediante un algoritmo específico que multiplica cada dígito del CUIT (sin el verificador) por una serie de valores fijos, suma los resultados, y aplica una operación módulo 11.
Pasos del algoritmo:
- Concatenar el prefijo con el DNI (10 dígitos)
- Multiplicar cada dígito por: [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
- Sumar todos los productos
- Calcular: 11 - (suma % 11)
- Si el resultado es 11, el verificador es 0
- Si el resultado es 10, se debe probar con otro prefijo
Implementación en JavaScript
A continuación, presentamos una función completa para calcular el CUIT:
/**
* Calcula el dígito verificador del CUIT
* @param {string} prefijo - Prefijo de 2 dígitos (20, 23, 27, 30, 33, etc.)
* @param {string} dni - Número de DNI de 8 dígitos
* @returns {number} Dígito verificador o -1 si no es válido
*/
function calcularVerificador(prefijo, dni) {
// Multiplicadores para cada posición
const multiplicadores = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
// Concatenar prefijo y DNI
const cuitParcial = prefijo + dni.padStart(8, '0');
// Calcular suma ponderada
let suma = 0;
for (let i = 0; i < 10; i++) {
suma += parseInt(cuitParcial[i]) * multiplicadores[i];
}
// Calcular verificador
let verificador = 11 - (suma % 11);
// Casos especiales
if (verificador === 11) {
verificador = 0;
} else if (verificador === 10) {
return -1; // No válido con este prefijo
}
return verificador;
}
/**
* Obtiene el CUIT completo a partir del DNI y sexo/tipo
* @param {string} dni - Número de DNI
* @param {string} tipo - 'M' (masculino), 'F' (femenino), 'S' (sociedad)
* @returns {string} CUIT completo con formato XX-XXXXXXXX-X
*/
function obtenerCUIT(dni, tipo) {
// Normalizar DNI (eliminar puntos y espacios)
dni = dni.replace(/[.\s]/g, '').padStart(8, '0');
// Validar DNI
if (!/^\d{7,8}$/.test(dni)) {
throw new Error('DNI inválido');
}
// Determinar prefijos posibles según el tipo
let prefijos = [];
switch (tipo.toUpperCase()) {
case 'M':
prefijos = ['20', '23']; // Masculino
break;
case 'F':
prefijos = ['27', '23']; // Femenino
break;
case 'S':
prefijos = ['30', '33']; // Sociedad
break;
default:
throw new Error('Tipo inválido. Use M, F o S');
}
// Intentar con cada prefijo hasta encontrar uno válido
for (const prefijo of prefijos) {
const verificador = calcularVerificador(prefijo, dni);
if (verificador !== -1) {
return `${prefijo}-${dni}-${verificador}`;
}
}
// Si ningún prefijo funciona, usar el primero con verificador alternativo
const prefijo = prefijos[0];
const verificador = calcularVerificador(prefijo, dni);
return `${prefijo}-${dni}-${verificador === -1 ? 0 : verificador}`;
}
// Ejemplos de uso
console.log(obtenerCUIT('20123456', 'M')); // 20-20123456-6
console.log(obtenerCUIT('30123456', 'F')); // 27-30123456-8
console.log(obtenerCUIT('12345678', 'S')); // 30-12345678-1
Calculadora Interactiva
Prueba el Cálculo de CUIT
Consideraciones Importantes
- El DNI debe tener entre 7 y 8 dígitos (se completa con ceros a la izquierda si es necesario)
- Algunos DNI (personas físicas) pueden requerir el prefijo 23 si el dígito verificador da 10
- La mayoría de las sociedades usan el prefijo 30
- Las sociedades pueden usar el prefijo 33 si el dígito verificador da 10
- Los prefijos 24 y 34 no pueden calcularse a través de fórmulas
- Este cálculo es solo una herramienta educativa; siempre verifica con la AFIP para datos oficiales
Conclusión
El cálculo del CUIT a partir del DNI es un proceso algorítmico bien definido que puede implementarse fácilmente en JavaScript. Esta herramienta es útil para validaciones en formularios web, sistemas de facturación, y aplicaciones que requieran identificación tributaria en Argentina.
Ponte en contacto
Comunícate con nosotros utilizando el formulario de contacto a continuación, o el botón de Whatsapp en la parte inferior. Esperamos con ansias escuchar de ti y ayudarte con tus necesidades tecnológicas.
