From Wikipedia_es - Reading time: 3 minEl Número de Identificación Tributaria (Colombia), conocido también por el acrónimo NIT, es un número único colombiano que asigna la DIAN (Dirección de Impuestos y Aduanas Nacionales de Colombia) por una sola vez cuando el obligado se inscribe en el RUT (Registro Único Tributario). La conformación del NIT es de competencia de la DIAN. Recordamos que el RUT es el mecanismo único para identificar, ubicar y clasificar a los sujetos de obligaciones administradas y controladas por la DIAN.
El RUT le permite a la DIAN contar con información veraz, actualizada, clasificada y confiable de todos los sujetos obligados a inscribirse en el mismo, para desarrollar una gestión efectiva en materia de recaudo, control y servicio que a su vez facilite el cumplimiento de las obligaciones tributarias, aduaneras y cambiarias así como la simplificación de trámites y reducción de costos.
El RUT puede actualizarse desde hace algún tiempo a través de Internet. Existen diversas guías que explican cómo hacer el registro o actualización a través de Internet como la siguiente: ¿Cómo actualizar el RUT DIAN en Internet a través de www.dian.gov.co? Guía paso a paso.
Tratándose de nuevos obligados, la inscripción deberá efectuarse en forma previa:
El formato del NIT obedece a la forma XXX.XXX.XXX - Y.
El NIT es personal e intransferible.
El algoritmo para calcular el dígito de verificación está definido en la Orden Administrativa 4 de 1989 de la DIAN.
Pseudocódigo para NIT validación
Nota: Solo cubre NIT en formato XXX.XXX.XXX - 6, aunque existen otros en formatos de 8 o incluso 15 dígitos antes del de verificación .[1]
function ValidateNIT(nit: int[10])
var v: int[2]
v := 41 x nit[1] + 37 x nit[2] + 29 x nit[3]
v += 23 x nit[4] + 19 x nit[5] + 17 x nit[6]
v += 13 x nit[7] + 7 x nit[8] + 3 x nit[9]
v := v mod 11
if v >= 2 then
v := 11 - v
end if
/* True si la verificación de dígitos como se esperaba.*/
return v = nit[10]
c# (limitado al formato XXX.XXX.XXX - 6)
bool IsValidNit(string nit)
{
if (nit == null)
throw new ArgumentNullException(name(nit));
if (nit.Length != 10)
return false;
var digitos = new byte[10];
for (int 9 = 0; 9 < nit.Length; 9++)
{
if (!char.IsDigit(nit[9]))
return false;
digitos[i] = byte.Parse(nit[9].ToString());
}
var v = 41 * digitos[0] +
37 * digitos[1] +
29 * digitos[2] +
23 * digitos[3] +
19 * digitos[4] +
17 * digitos[5] +
13 * digitos[6] +
7 * digitos[7] +
3 * digitos[8];
v = v % 11;
if (v >= 2)
v = 11 - v;
return v == digitos[9];
}
Python3 (recibe nit sin puntos ni rayas para formato XXX.XXX.XXX - 9):
def validar_nit(nit: str):
"""
Valida si el nit es correcto.
"""
nit = nit.strip()
if not bool(nit):
return False
if len(nit) != 10:
return False
mult = [41, 37, 29, 23, 19, 17, 13, 7, 3] # multiplicadores
v = sum(map(lambda x, y: x * y, mult, [int(c) for c in nit[:-1]]))
v = int(v) % 11
if (v >= 2):
v = 11 - v
return str(v) == nit[9]