Articulo de referencia

Algoritmo de Luhn

El algoritmo de Luhn o fórmula de Luhn (creador: el científico de IBM Hans Peter Luhn ), también conocido como algoritmo " módulo 10" o "mod 10" , es una fórmula simple de dígit...

El algoritmo de Luhn o fórmula de Luhn (creador: el científico de IBM Hans Peter Luhn ), también conocido como algoritmo " módulo 10" o "mod 10" , es una fórmula simple de dígito de control que se utiliza para validar diversos números de identificación. [ a ] El propósito es diseñar un esquema de numeración de tal manera que, cuando una persona introduce un número, un ordenador pueda comprobar rápidamente si hay errores.

El algoritmo es de dominio público y se utiliza ampliamente en la actualidad. Está especificado en la norma ISO/IEC 7812-1 . [ 2 ] No está diseñado para ser una función hash criptográficamente segura ; fue concebido para proteger contra errores accidentales, no contra ataques maliciosos. La mayoría de los números de tarjetas de crédito y muchos números de identificación gubernamentales utilizan el algoritmo como un método sencillo para distinguir los números válidos de los números mal escritos o incorrectos.

Descripción

El dígito de control se calcula de la siguiente manera:

  1. Elimine el dígito de control del número (si ya está presente). Esto deja la carga útil.
  2. Comience con los dígitos de la carga útil y duplique cada segundo dígito (un dígito en una posición impar en orden inverso) cuando se numere de izquierda a derecha.
  3. Procese la carga útil de derecha a izquierda. Si un dígito duplicado excede el 9 , réstele 9 al dígito.
  4. Suma todos los dígitos resultantes (incluidos los que no se duplicaron).
  5. El dígito de control se calcula mediante(10(smod10))mod10{\displaystyle (10-(s{\bmod {10}})){\bmod {10}}}, donde s es la suma del paso 4. Este es el número más pequeño (posiblemente cero) que debe sumarse as{\displaystyle s}para formar un múltiplo de 10.
  6. Otras fórmulas válidas que dan el mismo valor son:9((s+9)mod10){\displaystyle 9-((s+9){\bmod {10}})},(10s)mod10{\displaystyle (10-s){\bmod {10}}}, y10s/10s{\displaystyle 10\lceil s/10\rceil -s}. Tenga en cuenta que la fórmula(10s)mod10{\displaystyle (10-s){\bmod {10}}}No funcionará en todos los entornos debido a las diferencias en la forma en que la operación módulo maneja los números negativos .

Ejemplo para calcular el dígito de control

Supongamos, por ejemplo, el número de cuenta 1789372997 (solo la "carga útil", sin incluir aún el dígito de control):

La suma de los dígitos resultantes es 56.

El dígito de control es igual a(10(56mod10))mod10=4{\displaystyle (10-(56{\bmod {10}})){\bmod {10}}=4}.

Esto hace que el número de cuenta completo sea 17893729974.

Ejemplo para validar el dígito de control

  1. Elimine el dígito de control (último dígito) del número que desea validar. (p. ej., 17893729974 1789372997)
  2. Calcula el dígito de control (ver arriba).
  3. Compara tu resultado con el dígito de control original. Si ambos números coinciden, el resultado es válido. (p. ej., (gidículodecontrolobtenido = dígitodecontrolcalculado) (dígitodecontrolesválido)).

Fortalezas y debilidades

El algoritmo de Luhn detectará todos los errores de un solo dígito, así como casi todas las transposiciones de dígitos adyacentes. Sin embargo, no detectará la transposición de la secuencia de dos dígitos 09 a 90 (o viceversa). Detectará la mayoría de los posibles errores gemelos (no detectará 2255 , 3366 ni 4477 ).

Otros algoritmos de dígitos de control más complejos (como el algoritmo de Verhoeff y el algoritmo de Damm ) pueden detectar más errores de transcripción. El algoritmo Luhn mod N es una extensión que admite cadenas no numéricas.

Dado que el algoritmo opera sobre los dígitos de derecha a izquierda y los ceros solo afectan el resultado si provocan un cambio de posición, rellenar con ceros el inicio de una cadena de números no afecta el cálculo. Por lo tanto, los sistemas que rellenan hasta un número específico de dígitos (por ejemplo, al convertir 1234 en 0001234) pueden realizar la validación de Luhn antes o después del relleno y obtener el mismo resultado.

El algoritmo apareció en una patente de Estados Unidos [ 1 ] para un dispositivo mecánico sencillo y portátil para calcular la suma de verificación. El dispositivo calculaba la suma módulo 10 por medios mecánicos. Los dígitos de sustitución , es decir, los resultados del procedimiento de duplicación y reducción, no se generaban mecánicamente. En cambio, los dígitos estaban marcados en su orden permutado en el cuerpo de la máquina.

Implementación en pseudocódigo

La siguiente función recibe un número de tarjeta, incluyendo el dígito de control, como una matriz de enteros y devuelve verdadero si el dígito de control es correcto, y falso en caso contrario.

función isValid(cardNumber[1..length]) suma := 0 paridad := longitud módulo 2 para i desde 1 hasta (longitud - 1) hacer si i mod 2 == paridad entonces suma := suma + número de tarjeta[i] elseif cardNumber[i] > 4 entonces suma := suma + 2 * númeroDeTarjeta[i] - 9 demás suma := suma + 2 * númeroDeTarjeta[i] fin si fin para devolver cardNumber[length] == ((10 - (suma mod 10)) mod 10) fin función

Usos

El algoritmo de Luhn se utiliza en una variedad de sistemas, entre ellos:

Referencias

  1. 1 2 Patente estadounidense 2950048A , Luhn, Hans Peter , "Computadora para verificar números", publicada el 23 de agosto de 1960, emitida el 23 de agosto de 1960 
  2. «Anexo B: Fórmula de Luhn para el cálculo de dígitos de control de módulo 10 "doble suma doble"». Tarjetas de identificación — Identificación de emisores — Parte 1: Sistema de numeración (norma). Organización Internacional de Normalización y Comisión Electrotécnica Internacional . Enero de 2017. ISO/IEC 7812-1 :2017.
  3. Publicación 199: Guía de implementación del código de barras inteligente para paquetes postales (IMpb) para servicios de confirmación y sistemas de pago electrónico (PDF) (28.ª ed.). Estados Unidos : Servicio Postal de los Estados Unidos . 10 de octubre de 2023. Archivado (PDF) del original el 17 de noviembre de 2023. Consultado el 29 de noviembre de 2023 . 
  4. Albanese, Ilenia (10 de agosto de 2022). "A cosa serve la Partita Iva? Ecco cosa sapere" [ ¿ Para qué sirve el número de IVA? Esto es lo que debes saber ] . Partitaiva.it (en italiano). Archivado del original el 29 de junio de 2024. Consultado el 29 de junio de 2024 .

Notas

  1. Se describe en la patente estadounidense 2950048A, otorgada el 23 de agosto de 1960. [ 1 ]