Dígitos de control: Luhn, códigos de barras, ISBN y los errores que pasan por alto

Escribe un número de tarjeta, un IMEI, un código de barras o un ISBN y elige el sistema que lo verifica. La página muestra qué aporta cada dígito y si el número es válido. Luego, prueba todos los errores a un paso del original y enumera los que el dígito de control no detectaría.

Cargando simulación interactiva...

Lección

La teoría — Dígitos de control: Luhn, códigos de barras, ISBN y los errores que pasan por alto

Un dígito de control es una cifra adicional elegida para que todo el número cumpla una regla. En este caso, la regla es que los dígitos, al multiplicarse o transformarse según su posición, sumen un múltiplo del módulo, 10 u 11. Un error que rompe la regla es detectado. El que la mantiene no lo es, por lo que un dígito de control puede demostrar que un número es incorrecto, pero nunca que es correcto.

Qué significa cada símbolo

dᵢ
el dígito a i posiciones desde la derecha; el dígito de control es d0
wᵢ
el peso de la posición i: 1 y 3 alternativamente para un código de barras, i + 1 para ISBN-10
D(d)
la duplicación de Luhn: 2d, menos 9 cuando supera el 9, quedando en 0 2 4 6 8 1 3 5 7 9
S
la suma de lo que aporta cada dígito
m
el módulo, 10 para Luhn y el código de barras, 11 para ISBN-10; el número es válido cuando S es múltiplo de m
Supone
Un solo error a la vez. Dos errores en un mismo número pueden anularse entre sí, y los recuentos de la página no dicen nada al respecto. La tabla asume que todos los pares de dígitos son igual de probables, algo que no ocurre al teclear en la vida real. El único par de vecinos ciego para Luhn es el 09 y el 90, y la frecuencia con la que ambos aparecen juntos depende de cómo sean los números.
Falla cuando
Un dígito de control no aporta seguridad. Cualquiera que conozca el sistema puede generar un número válido. Por eso, un número de tarjeta que pasa el sistema de Luhn solo significa que se tecleó correctamente. El ISBN-13 usa el sistema del código de barras porque un ISBN-13 es en sí mismo un número de código de barras, operando bajo los prefijos 978 y 979 que habilitó GS1.

Luhn detecta todos los intercambios de vecinos salvo uno: el 09 y el 90 🖖

Pulsa 1234567890 + control. Intercambia el 9 y el 0 y el resultado, 12345678093, pasa. Luhn duplica uno de cada dos dígitos y, cuando el doble tiene dos cifras, las suma: el 9 pasa a 18 y luego a 9, mientras que el 0 sigue siendo 0. Intercambiar dos vecinos desplaza la suma en la diferencia entre lo que la duplicación añade a cada uno. Duplicar añade 0 a un 0, 1 a un 1, 4 a un 4, −4 a un 5, −1 a un 8 y 0 a un 9. El 0 y el 9 son los únicos dos dígitos que trata por igual. Por eso la cuadrícula izquierda tiene exactamente dos celdas rojas, 09 y 90, y el sistema detecta el 97,8% de los intercambios de vecinos. Pulsa IMEI: no tiene ningún 9 junto a un 0, y ninguno de sus 13 intercambios de vecinos logra pasar.

Ningún dígito de control basado en sumar dígitos mod 10 detecta todos los intercambios 🖖

Pulsa Código de barras UPC. Dos de sus nueve intercambios de vecinos pasan: el 3 con el 8, y el 0 con el 5. Un código de barras multiplica dígitos alternos por 3 y 1, así que intercambiar a y b altera la suma en 2(a − b), un múltiplo de 10 siempre que disten cinco unidades. Eso supone 10 de los 90 pares. Otras ponderaciones no lo hacen mejor. Para detectar cada dígito incorrecto, el peso debe ser 1, 3, 7 o 9 mod 10. Cualquiera de ellos difiere de otro en un número par, y un número par multiplicado por 5 es múltiplo de 10. El 88,9% es el techo para cualquier ponderación. La duplicación de Luhn no es un peso constante y alcanza el 97,8%. No puede llegar al 100%. Gallian cita la demostración de H. P. Gumm de 1985 de que ningún sistema que sume sus dígitos, por mucho que cada posición los transforme antes, puede detectar cada dígito incorrecto y cada intercambio de vecinos cuando el módulo es par. J. Verhoeff logró ambas cosas en 1969 multiplicando en el grupo diédrico del pentágono, donde el orden de los factores sí importa.

Intercambia dos dígitos separados por una posición y Luhn nunca se da cuenta 🖖

Pulsa IMEI. Sus 12 intercambios con salto pasan el control. Los dos dígitos ocupan posiciones de la misma paridad, por lo que Luhn duplica ambos o ninguno, y el código de barras les da el mismo peso a los dos. Intercambiarlos no puede mover la suma, y la tabla clasifica ambos sistemas con un 0,0%. El ISBN-10 da a cada posición su propio peso, de 10 a 1 en orden descendente. Un intercambio altera la suma en la diferencia de dos pesos multiplicada por la diferencia de dos dígitos, y como el 11 es primo ese producto nunca es múltiplo de 11. Pulsa ISBN-13 y luego ISBN-10: se trata de un solo número, pero 9 de 9 de estos intercambios burlan el primer sistema, frente a 0 de 6 en el segundo. Es un error poco común, un 0,8% de los errores reales en el recuento de Verhoeff, frente al 10,2% de los intercambios de vecinos. Pero mod 11 tiene su propia laguna. Gasta un símbolo, X, para el dígito de control 10. Además, en las posiciones ponderadas con 6 y 5, que suman 11, deja pasar todos los errores en dígitos dobles.

Problema resuelto al detalle

  1. Recuperar un dígito borroso de un ISBN-10 4 pasos

    Un ISBN-10 es 0-11-000?22-9, con el séptimo dígito borroso. Averígualo y explica por qué solo existe una respuesta exacta. Pulsa ISBN-10 para comprobar el resultado.

    Abre este problema en la herramienta

    1. Los pesos van de 10 a 1 desde la izquierda, así que el séptimo dígito borroso lleva un peso de 4. Suma los otros nueve dígitos multiplicados por sus pesos.

    2. La suma total tiene que ser un múltiplo de 11, por lo que 4 veces el dígito que falta debe compensar la diferencia.

    3. En mod 11 se puede dividir, porque el 11 es primo: 4 × 3 = 12 es 1 más que 11, de modo que multiplicar por 3 deshace la multiplicación por 4.

    4. Vuelve a colocar el 2 y la suma de la página será 44, exactamente cuatro onces.

    Respuesta

    El dígito es el 2, y el ISBN es 0-11-000222-9. Es el único que encaja porque multiplicar por 4 envía los once valores de 0 a 10 a once restos distintos mod 11. En consecuencia, exactamente uno de ellos cae en el 8. Esa es la misma propiedad que permite al sistema detectar cualquier dígito incorrecto en esta posición, vista desde el lado opuesto. Un peso que visibiliza cada error aislado también vuelve recuperable cualquier borrón. Un sistema mod 10 con un peso de 2 en ese lugar daría dos candidatos o ninguno, y pasaría por alto cualquier dígito incorrecto en esa posición que distara cinco unidades del verdadero.

Referencias (3)