METODOLOGÍA · COLOMBIA
Dígito de verificación del NIT colombiano
El NIT colombiano usa el algoritmo módulo 11 con pesos fijos aplicados de derecha a izquierda para calcular su dígito de verificación (DV). Esta página explica el algoritmo conceptualmente, incluye un ejemplo numérico completo, y enumera los edge cases que hacen que implementaciones simples fallen en producción. Sin consulta a la DIAN.
El algoritmo
El NIT (Número de Identificación Tributaria) es el identificador fiscal colombiano emitido por la DIAN, la autoridad tributaria de Colombia. Se compone de 9 dígitos principales más un guion y un dígito de verificación (DV), en el formato XXXXXXXXX-V. Por ejemplo, 900123456-7: los 9 dígitos base son 900123456 y el DV es 7.
El DV se calcula con el algoritmo módulo 11 usando los pesos fijos [3, 7, 13, 17, 19, 23, 29, 37, 41]. Los pesos se aplican de derecha a izquierda sobre los 9 dígitos base: el dígito más a la derecha se multiplica por 3, el siguiente por 7, y así sucesivamente hasta que el dígito más a la izquierda se multiplica por 41.
Se suman los productos, se calcula el resto de dividir la suma por 11, y entonces: si el resto es 0 o 1, el DV es igual al resto; en cualquier otro caso, el DV es 11 menos el resto. El DV siempre es un único dígito 0–9 — el NIT nunca produce una ‘K’ como sí ocurre con el RUT chileno.
Ejemplo numérico paso a paso
Calculamos el dígito de verificación para el NIT base 890903938.
Pseudocódigo
weights = [3, 7, 13, 17, 19, 23, 29, 37, 41] // index 0 = rightmost digit digits = strip_non_numeric(base) // 9 digits, left-to-right sum = Σ digits_reversed[i] × weights[i] for i in 0..8 remainder = sum mod 11 if remainder == 0 or remainder == 1 → check_digit = remainder else → check_digit = 11 − remainder return check_digit == provided_dv
Edge cases que una implementación simple no maneja
- Alineación de pesos de derecha a izquierda: la DIAN asigna los pesos de derecha a izquierda, así que el dígito más a la derecha de los 9 se multiplica por 3 y el más a la izquierda por 41. Un off-by-one en la alineación de pesos es el bug de implementación #1 — invierte la asignación y todos los DV salen mal.
- resto 0 o 1 → DV = resto: a diferencia del Mod-11 clásico que hace 11 − resto siempre, el NIT devuelve el resto directamente cuando es 0 o 1. Implementaciones que aplican 11 − resto sin esta excepción producen DV de 11 o 10, que son imposibles.
- El DV siempre es 0–9, nunca ‘K’:el NIT nunca genera un dígito verificador no numérico como sí hace el RUT chileno. Si tu validación contempla ‘K’ para el NIT, está copiada de otro país.
- NIT de personas naturales = Cédula de Ciudadanía + DV: el NIT de una persona natural suele ser su número de cédula con el DV calculado y agregado. La misma fórmula módulo 11 aplica, sin importar la longitud de la cédula base.
- Primer dígito de empresas usualmente 8 o 9: los NIT de personas jurídicas suelen comenzar con 8 o 9. Esto es una convención de asignación, no una regla del checksum — no la uses como única validación.
- Ceros a la izquierda y guion: entradas como
0900123456-7,900123456-7o9001234567deben normalizarse (quitar el guion, conservar los ceros) antes de calcular. Tratar el NIT como entero pierde ceros iniciales y desplaza la alineación de pesos. - Entrada no numérica: NIT pegado a texto (
"NIT 900123456-7"), espacios, puntos de miles (900.123.456-7) o caracteres Unicode invisibles deben extraerse y limpiarse antes de validar, o el conteo de dígitos será incorrecto. - Longitud variable de la base: aunque el caso típico de empresa son 9 dígitos base, algunas cédulas usadas como NIT de persona natural tienen otra cantidad de dígitos. Aplica los pesos desde la derecha y trunca el arreglo de pesos a la longitud real de la base.
- Confusión NIT vs DV en el mismo campo: sistemas que almacenan NIT y DV juntos vs separados producen inconsistencias. Verifica si el campo incluye o no el guion + DV antes de recalcular.
- Sin consulta a la DIAN: el checksum confirma que el DV es consistente con la base, pero no confirma que el NIT exista, esté activo o corresponda a la razón social declarada. Eso requiere consultar el registro RUT de la DIAN.
¿Querés saltarte todo esto?
Manejar todos estos edge cases en producción cuesta semanas de testing y mantenimiento permanente conforme cambian las reglas regulatorias. La API de Normadata maneja todo lo de arriba — incluyendo los casos que ni listamos aquí — con una sola llamada REST.
Fuentes
DIAN — especificación pública del algoritmo módulo 11 para el dígito de verificación del NIT. El algoritmo es de conocimiento público y ha sido implementado por múltiples integraciones tributarias en Colombia.