Autor Tema: ¿Cómo calcular dígito verificador del DUI y NIT?  (Leído 94032 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Chero

  • -*- vieuxMembeR -*-
  • Sv Member
  • ***
  • Mensajes: 307
¿Cómo calcular dígito verificador del DUI y NIT?
« : octubre 26, 2011, 11:52:54 pm »
¿Alguien sabe cómo calcular el dígito verificador del DUI y NIT? Busqué en Google y no encontré nada.

Esto sería para verificar los números cuando se registra una persona en un programa/tarea de la U que me está tocando hacer.  No es un requisito que me hayan pedido, pero siempre he tenido curiosidad de cómo se hace.

Desconectado JaiMe

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 1485
  • λ | h+
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #1 : octubre 27, 2011, 08:32:57 am »
No se que queres decir con esto: cómo calcular el dígito verificador

pero podes verificar si los digitos siguen un formato predeterminado con expressiones regulares.

Por ejemplo el DUI creo que sigue este formato

12345678-1

Solo tendrias que evaluar la cadena de texto y hacer un test como este (en JavaScript):

Código: [Seleccionar]
var regex = /^\d{8}-\d$/;
regex.test("12345678-1")       // true

regex.test("12345678")         // false
regex.test("123456789-1")      // false
regex.test("12345678-12")      // false

Varios lenguajes de programacion comparten la misma syntax para las expressiones regulares, con cambios minimos en la manera de instanciarlas y ejecutarlas.

Ahora, para el NIT, que sigue este formato 1234-123456-123-0, el processo seria bastante familiar y te lo dejo de tarea para que te familiarizes con las expressiones regulares.

pd: Yo no tengo ninguno de esos documentos, asi que no estoy seguro del formato
"Unless you try to do something beyond what you have already mastered, you will never grow."
― Ralph Waldo Emerson

Desconectado tekun

  • -^- Elite Silver -^-
  • The Communiter-
  • *
  • Mensajes: 3221
  • Han convertido mi casa en cueva de mercaderes!!!!
    • www.tekun.es
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #2 : octubre 27, 2011, 04:18:37 pm »
creo que lo que chero busca es validar si un dui es válido o no....


adjunto un bloc de notas con el codigo de una funcion en pl para verificar eso... ahí están los procesos matematicos que se realizan, espero te sirva de algo

con los permisos de alberto, porque no puso sus términos legales de usar la función, es que lo comparto...
lo difícil lo hago rápido, con lo imposible, casi siempre me tardo un poquito

Desconectado Jaru

  • The Communiter-
  • *
  • Mensajes: 13252
  • some text
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #3 : octubre 27, 2011, 04:42:40 pm »
no soy muy bueno en pascual

alguien podria poner el algoritmo ya sacado?
N/A

Desconectado Camus de Acuario

  • The Communiter-
  • *
  • Mensajes: 8455
  • Ōrora Ekusukyūshon!
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #4 : octubre 27, 2011, 05:18:36 pm »
No se que queres decir con esto: cómo calcular el dígito verificador

pero podes verificar si los digitos siguen un formato predeterminado con expressiones regulares.
Lo que pasa es que para documentos de este tipo no solo siguen un patron o formato, sino que al final tienen un numero verificador que es calculado con referencia a los otros numeros, para valga la redundancia validar el número final.

no soy muy bueno en pascual

alguien podria poner el algoritmo ya sacado?
No es pascual, es PL/SQL, lenguaje de programacion con sentencias TSQL para oracle.

Para el del DUI el proceso que recuerdo es este:
-el numero que esta a la derecha del guion se conoce como digito verificador
-se coloca el numero sin guiones y con ceros a la izquierda
-deben ser 9 caracters
-se toman los primeros 8 caracteres (sin el digito verificador) y a cada uno se le multiplica por la posicion en la que se encuentra. Partiendo que la posicion 9 es el primer numero de la izquierda.
-se suman todos los resultados
-se hace un mod de la suma dividido por 10 (osea toma el remanente de esa division)
-Resta 10 menos el remanente de la division
-si la resta da 0 el DUI es correcto
-si la resta es igual al digito verificador el DUI es correcto
-si la resta es distinta al digito verificador el DUI es incorrecto

Desconectado Camus de Acuario

  • The Communiter-
  • *
  • Mensajes: 8455
  • Ōrora Ekusukyūshon!
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #5 : octubre 27, 2011, 05:30:30 pm »
Pongamolo en practica, tomemos como ejemplo el DUI de este simpatico señor que encontre en google images.



El DUI del sonriente señor es:
00016297-5

Digito verificador: 5

Ahora asignemos las posiciones

Posicion -> 9     8     7     6     5     4     3      2
DUI       -> 0     0     0     1     6     2     9      7

SUMA: (9*0)+(8*0)+(7*0)+(6*1)+(5*6)+(4*2)+(3*9)+(2*7) = 85
DIVISION: MOD(85/10) = 5
RESTA: 10 - 5 = 5
Digito Verificador = 5 = Resta = 5 = DUI valido.

Intentenlo con su DUI, verificare si aca en la BD hay alguna funcion para verificar el NIT.
« Última Modificación: octubre 27, 2011, 05:35:13 pm por Camus de Acuario »

Desconectado el-mago

  • The Communiter-
  • *
  • Mensajes: 2040
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #6 : octubre 27, 2011, 05:45:21 pm »
Exelente explicación Camus.... :):)
Paquete WebHosting + Dominio desde US$35.00/año cPanel || Consulta sin compromiso!

Desconectado hkadejo

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 3345
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #7 : octubre 27, 2011, 06:19:49 pm »
Para el NIT existe un procedimiento similar como el que ha explicado Camus...el ultimo digito es un verificador.
Lo unico que desconozco es si el algoritmo para calcular ese digito es alguna especie de secreto de estado, mañana hare la pregunta a mi jefe y sino hay ningun problema publicare aca todo el procedimiento.

Desconectado JaiMe

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 1485
  • λ | h+
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #8 : octubre 27, 2011, 06:45:07 pm »
No estaba familiar con el bendito digito verificador, me recuerda a la validacion de tarjetas de credito. Por si alguna ves alguien necesita hacer la verificacion del lado del cliente aqui les va mi implementacion (colaboracion para verificarla es bienvenida):

https://gist.github.com/1321329

Código: [Seleccionar]
var isDUI = function(str){
   var regex = /(^\d{8})-(\d$)/,
         parts = str.match(regex);

    // verficar formato y extraer digitos junto al digito verificador
    if(parts !== null){
      var digits = parts[1],
          dig_ve = parseInt(parts[2], 10),
          sum    = 0;

      // sumar producto de posiciones y digitos
      for(var i = 0, l = digits.length; i < l; i++){
        var d = parseInt(digits[i], 10);
        sum += ( 9 - i ) * d;
      }
      return dig_ve === 10 - ( sum % 10 );
    }else{
      return false;
    }
};


Uso

Código: [Seleccionar]
isDUI('00016297-5');    // true

isDUI('12345678-1');    // false
isDUI('123456789-1');   // false
isDUI('12345678-12');   // false
« Última Modificación: octubre 27, 2011, 06:50:26 pm por JaiMe »
"Unless you try to do something beyond what you have already mastered, you will never grow."
― Ralph Waldo Emerson

Desconectado Camus de Acuario

  • The Communiter-
  • *
  • Mensajes: 8455
  • Ōrora Ekusukyūshon!
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #9 : octubre 27, 2011, 07:29:10 pm »
Para el NIT existe un procedimiento similar como el que ha explicado Camus...el ultimo digito es un verificador.
Lo unico que desconozco es si el algoritmo para calcular ese digito es alguna especie de secreto de estado, mañana hare la pregunta a mi jefe y sino hay ningun problema publicare aca todo el procedimiento.
Yo creo que la tengo, mas tarde la publico

No estaba familiar con el bendito digito verificador, me recuerda a la validacion de tarjetas de credito.
Exacto, es la misma idea, casi todo tipo de documentos asi se generan con un algoritmo, llamese numero de tarjeta, numero de documento unico (DUI, DIU, NIT), numeros electorales, licencias, NIT, hasta para el pasaporte creo que hay
« Última Modificación: octubre 27, 2011, 07:32:37 pm por Camus de Acuario »

Desconectado hkadejo

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 3345
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #10 : octubre 27, 2011, 07:43:36 pm »
Yo creo que la tengo, mas tarde la publico

Publicala y la comparo con la version que se usa en hacienda (llamemola la version "oficial")

Desconectado Chero

  • -*- vieuxMembeR -*-
  • Sv Member
  • ***
  • Mensajes: 307
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #11 : octubre 27, 2011, 09:07:04 pm »
Gracias por compartir el algoritmo de la validación del DUI  :thumbsup:

El proyecto en el que estoy trabajando está en Visual Basic (decisión de los compañeros de la U, no mía xD), cuando escriba la función en VB la voy a subir acá para quien la necesite.

Desconectado mmdiazl

  • Sv Full Member
  • *
  • Mensajes: 551
  • Una respuesta honesta es señal d una buena amistad
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #12 : octubre 27, 2011, 09:25:14 pm »
Quiero ver si entendi, esta funcion consiste en verificar si el DUI ingresado esta asignado a una persona y por lo tanto es real.

Desconectado Chero

  • -*- vieuxMembeR -*-
  • Sv Member
  • ***
  • Mensajes: 307
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #13 : octubre 27, 2011, 09:33:03 pm »
Quiero ver si entendi, esta funcion consiste en verificar si el DUI ingresado esta asignado a una persona y por lo tanto es real.

No exactamente, es más para verificar que el número se escribió correctamente.

Muchos números que se elaboran por computadora se les agrega un último dígito que actúa como dígito verificador. Este dígito se calcula aplicando un algoritmo a todos los demás dígitos del número.

Por ejemplo, el último dígito de los códigos de barra es un dígito verificador, el scanner puede verificar si leyó correctamente el número calculando el dígito verificador y comparando con el núemro que leyo. También se usan en el NIT, tarjetas de crédito y otros tipos de documento.

Desconectado mmdiazl

  • Sv Full Member
  • *
  • Mensajes: 551
  • Una respuesta honesta es señal d una buena amistad
Re: ¿Cómo calcular dígito verificador del DUI y NIT?
« Respuesta #14 : octubre 27, 2011, 09:39:31 pm »
No exactamente, es más para verificar que el número se escribió correctamente.

Muchos números que se elaboran por computadora se les agrega un último dígito que actúa como dígito verificador. Este dígito se calcula aplicando un algoritmo a todos los demás dígitos del número.

Por ejemplo, el último dígito de los códigos de barra es un dígito verificador, el scanner puede verificar si leyó correctamente el número calculando el dígito verificador y comparando con el núemro que leyo. También se usan en el NIT, tarjetas de crédito y otros tipos de documento.

Ahora si...Gracias  :thumbsup: :D