Paginas

jueves, 19 de julio de 2012

Función para Validar NIT Guatemala


En Guatemala el ente recaudador de impuestos se llama SAT (Superintendencia de Administración Tributaria).

Para cada empresa o persona individual, esta entidad gubernamental asigna un número (código) único llamado NIT (Número de Identificación Tributaria). Para los que trabajamos con programación se hace necesaria la validación de los NIT's a la hora de tener que recabar información acerca de usuarios que poseen dicho número.

El NIT es un número que asigna la SAT a cada contribuyente guatemalteco.

Hace algunos días me vi en la necesidad de buscar código para validar dichos NIT's y afortunadamente me encontré una página que me dio la solución sobre el asunto, casi sin fallos, el código que encontré me funciona perfectamente.

La función está escrita en JavaScript y al menos a mí me ha funcionado muy bien, les comparto la función y espero que les sea de mucho provecho.

/****************************************
           CÓDIGO DE LA FUNCIÓN
 ****************************************/

function validar_nit(txtN) {
    // en el caso de los NIT que terminan en K, se convierte a mayúsculas
    // también el NIT CF o C/F es válido (CF = consumidor final)
    txtN = txtN.toUpperCase();
    if (txtN == "CF" || txtN == "C/F") return true;
    var nit = txtN;
    var pos = nit.indexOf("-");

    if (pos < 0)
    {
        var correlativo = txtN.substr(0, txtN.length - 1);
        correlativo = correlativo + "-";

        var pos2 = correlativo.length - 2;
        var digito = txtN.substr(pos2 + 1);
        nit = correlativo + digito;
        pos = nit.indexOf("-");
        txtN = nit;
    }

    var Correlativo = nit.substr(0, pos);
    var DigitoVerificador = nit.substr(pos + 1);
    DigitoVerificador.toUpperCase();
    var Factor = Correlativo.length + 1;
    var Suma = 0;
    var Valor = 0;
    for (x = 0; x <= (pos - 1); x++) {
        Valor = eval(nit.substr(x, 1));
        var Multiplicacion = eval(Valor * Factor);
        Suma = eval(Suma + Multiplicacion);
        Factor = Factor - 1;
    }
    var xMOd11 = 0;
    xMOd11 = (11 - (Suma % 11)) % 11;
    var s = xMOd11;
    if ((xMOd11 == 10 && DigitoVerificador == "K") || (s == DigitoVerificador)) 
    {
        return true;
    }
    else 
    {
        return false;
    }
}


Espero les sirva tanto como a mí.

Las referencias pueden ubicarlas en los siguientes enlaces:


y también aquí:


Saludos.




2 comentarios:

  1. si alguien escribe algo como 0-0 ó .-. ó a-a
    este script lo toma como valido, faltaria una validacion de caracteres, he buscado pero no encuentro cuantos debe tener el nit...

    ResponderEliminar
  2. Hola, comparto versión utilizando python 3
    https://github.com/jmco0593/nit_gt

    ResponderEliminar