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.

Estructura del CUIT:
  • 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:

  1. Concatenar el prefijo con el DNI (10 dígitos)
  2. Multiplicar cada dígito por: [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
  3. Sumar todos los productos
  4. Calcular: 11 - (suma % 11)
  5. Si el resultado es 11, el verificador es 0
  6. 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.

Foto de perfil

Marcelo Mozzi

Programador de Aplicaciones y Desarrollador Web

Aficionado entusiasta de la electrónica

Amante de la familia y el deporte

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.

Media Solutions