Dígito verificador (3 min read)

El dígito verificador, también conocido como dígito de control es una aplicación sumamente sencilla de la teoría de números, de hecho decir que es parte de la teoría de números puede llegar a ser mucho decir.

Imagina que podrias constatar la validez de cualquier serie de números con información contenida en el mismo número. O sea un sistema de validación redundante o contenida. Es decir, podrías saber si algún teléfono que te dan es correcto, o el número de cuenta para hacer un depósito, un teléfono (ejemplos hipotéticos todos). Este sistema de dígito verificador es sumamente usado en referencias bancarias tarjetas de crédito, cheques, cuenta CLABE y en varios sistemas bancarios y comerciales.

Toda esta parafernalia se reduce a una regla sumamente sencilla y (en caso necesario) alguna llave. A continuación explco:

Actualmente para pagar el teléfono, los préstamos, cablevisión (sky,…), l te dan un número de cuenta y un número de referencia, es decir, un id único para ese pago. Imagina el problema en el que te metes si depositas a la misma cuenta pero con otro número de referencia, con la burocracia que existe, tus nietos serían los que llegarían a solucionar el problema (y probablemente no a tu favor). ¿O no? Pues en vista a evitar estas soluciones se utiliza ampliamente el sistema de dígito verificador. No sé y realmente no creo que sea muy importante conocer los orígenes sino su utilidad.

Imagina que tienes que pagar el teléfono a la cuenta ### (no importa) con la referencia 123455 (a veces no lo vemos, pero (casi) siempre en el recibo aparece la referencia), sabes que tu cuenta es la 12345, entonces ¿qué chingados es es último 5? Pues muy fácil, es el mentado dígito verificador que corresponde a la siguiente regla:

(n1 + n2 + n3 + n4 + n5) % 10

Es decir: la sumatoria de todos los dígitos módulo (o residuo) 10, o n6 = sum(i=1,5,ni)%10. Es decir, si se altera (por equivocación, escribes mal o te lo dicen mal) cualquier número de esta secuencia (123455) es muy difícil (o poco probable) conseguir una secuencia correcta, por ejemplo estos ejemplos:

– 124565 mal pues (1 + 2 + 4 + 5 + 6) % 10 = 8, no 5

– 123456 mal pues (1 + 2 + 3 + 4 + 5) % 10 = 5, no 6

– 122345 mal pues (1 + 2 + 2 + 3 + 4) % 10 = 2, no 5

– 123454 mal pues (1 + 2 + 3 + 4 + 5) % 10 = 5, no 4

De esta forma se consigue un primer filtro de verificación sumamente sencillo y barato, no es necesario comprobar el dato contra ningún servidor (en un sistema distribuido) pues cualquier cliente (terminal tonta, javascript, incluso windows, jejeje) puede corroborar que el dato sea válido (puede no ser correcto mas ser válido, pero esa es otra historia).

La regla que aqui expuse es sumamente sencilla: sum(i=1,k,ni)%10, pero para hacerla un poco más rubusta es necesario hacerla un poco más compleja, hacer una multiplicación o lo que sea, por ejemplo:

(sum ( i=1,k,ni) × 45673628764) % 1345 (por poner cualesquiera dos números)

sum(i=1,k,ni) % k

– …

Y más aún, si a cualqueir serie de números le ponemos más de un dígito verificador, la posibilidad de error se reduce exponencialmente, lo cual es mucho muy confiable.

Cabe mencionar que aplicaciones para esto no reciden exclusivamente en sistemas de paga, sistemas bancarios, pues si el sistema de generación de números es suficientemente robusto, pueden ser utilizados incluso para generación de llaves.

Si les interesó, échenle un ojo al mentado checksum, el cual es este mismo sistema de validación de información aplicado a archivos electrónicos, verifica la integridad de cualqueir tipo de archivo, muy usado para archivos compresos con zip, tar, rar, …

7 thoughts on “Dígito verificador”

  1. Como se dice arriba, sumas todos los digitos del numero en cuestion, y luego divides (a mano) entre 12 y el número que buscas es el residuo de esa división.

  2. Como lo puedo hacer si a lo que necesito sacarle el digito verificador lleva caracteres tipo char ejemplo
    MT00CR-IM-1005882008188

Leave a Reply

Your email address will not be published. Required fields are marked *