Vés al contingut

Algoritme de Luhn

De la Viquipèdia, l'enciclopèdia lliure

L'algoritme de Luhn o fórmula de Luhn, també conegut com a algoritme “mòdul 10” o “mod 10”, anomenat així pel seu creador, el científic de l'IBM, Hans Peter Luhn, que el va dissenyar el 1954, és una fórmula de suma de control simple que s'utilitza per validar una gran varietat de números d'identificació, com ara els números de targeta de crèdit, números IMEI, etc.[1]

L'algoritme és de domini públic i té un ampli ús avui en dia. S'especifica a ISO/IEC 7812-1.[2] No es pretén que sigui una funció de hash segura de forma criptogràfica. El seu objectiu és el de protegir contra errors accidentals, no atacs maliciosos. La majoria de les targetes de crèdit i molts números d'identificació del govern utilitzen l'algoritme com a mètode senzill per distingir els números vàlids de xifres equivocades o incorrectes, identificant possibles errors durant la digitació o transmissió d'una una quantitat considerable de nombres entre una font i una altra, per exemple, durant la digitació d'un número de targeta per una persona en un formulari web o en la seva escriptura en un paper.[1]

Pel que fa a la detecció d'errors, l'algoritme de Luhn permet detectar de manera molt eficaç un ampli ventall d'errors, però no tots. Detecta de manera completa qualsevol substitució d'un sol dígit, gràcies a l'aplicació de l'aritmètica modular, que assegura que qualsevol canvi alteri el residu final. També és capaç d'identificar gairebé totes les transposicions de dígits consecutius, amb l'única excepció d'algunes combinacions molt concretes (com el canvi de 09 a 90 o viceversa). En canvi, les transposicions de dígits situats en posicions d'igual paritat (és a dir, les dues posicions parelles o les dues senars) no són detectades, ja que els càlculs aplicats a aquests dígits no generen variacions en la suma final.

Exemple pràctic: com es valida una targeta?

[modifica]

El número imprès a la part frontal d'una targeta de crèdit o dèbit no és aleatori. Aquest número, anomenat PAN (Primary Account Number), permet identificar l'entitat emissora i el titular del compte, i incorpora un dígit de control que es calcula mitjançant l'algoritme de Luhn, especialment dissenyat per detectar errors de transcripció habituals[3].

L'algoritme s'aplica mitjançant una sèrie de passos molt concrets. Per entendre millor com funciona, s'explica tot seguit de forma detallada fent servir un exemple: la targeta amb número 4539 3195 0343 6467. Cal tenir present que l'últim dígit del número, que en aquest cas és el 7, és el dígit de control i serveix per verificar si tota la resta del número és correcta.

Així doncs, es posa per exemple la validació d'un número de targeta.

Pas 1: Primer de tot, es pren el número de la targeta i es llegeix d'esquerra a dreta. D'aquest, s'agafaran els dígits de les posicions senars, és a dir, un dígit sí i un no, que són els que es multiplicaran per dos en el següent pas. En aquest cas el número seria aquest: 4539 3195 0343 6467; per tant, els dígits que cal agafar són els següents: 4, 3, 3, 9, 0, 4, 6, 6.

Pas 2: Seguidament, s'agafen els dígits que s'han pres anteriorment, els de les posicions senars, i es multipliquen per dos. Com a resultat, queda: 8, 6, 6, 18, 0, 8, 12, 12.

Pas 3: Ara, s'agafen els resultats de les multiplicacions realitzades en el pas anterior: 8, 6, 6, 18, 0, 8, 12, 12. Si algun resultat té dues xifres (és més gran que 9), se sumen les xifres del resultat per reduir-lo a una sola xifra, o bé se li’n resta 9. Per tant, els dígits modificats són: 8, 6, 6, 9, 0, 8, 3, 3.

Pas 4: A continuació, cal agafar els dígits que no s'han tocat, és a dir, els dígits que es troben a les posicions parelles del número inicial (inclòs el dígit de control): 4539 3195 0343 6467 i s'han de sumar juntament amb els dígits modificats del pas anterior.

Pas 5: Finalment cal aplicar l'aritmètica modular amb mòdul 10. El número de targeta serà vàlid si la suma total feta anteriorment en mòdul 10 dona residu 0, és a dir, quan x ≡ 0 (mod 10), essent x la suma total. Dit d'una altra manera, per poder confirmar la validesa del número de targeta, cal que la suma total després de seguir tots els passos anteriors, sigui múltiple de 10.

Taula de l'exemple de validació d'un número de targeta amb l'aplicació de l'algoritme de Luhn.
Número de targeta complert 4 5 3 9 3 1 9 5 0 3 4 3 6 4 6 7
Valor de les xifres en posició senar

(després de multiplicar-les x1)

5 9 1 5 3 3 4 7 37
Valor de les xifres en posició parella

(després de multiplicar-les x2)

8 6 6 18 0 8 12 12
Valor de les xifres en posicó parella

(després de resar 9 als productes >9)

8 6 6 9 0 8 3 3 43
Suma total: 37+43 = 80 80 ≡ 0 (mod 10) El dígit de control és correcte: 7

En aquest cas 80 ≡ 0 (mod 10), cosa que significa que 80 és divisible per 10, per això el residu dona 0. Per tant, el número 4539 3195 0343 6467 és vàlid segons l'algoritme de Luhn.

Ara bé, si el dígit de control fos diferent, per exemple un 8 en lloc d'un 7, la suma total seria 81, i no seria vàlida. Només quan la suma total és exactament un múltiple de 10 (com per exemple 70, 80 o 90), el número de la targeta es considera vàlid estructuralment. Aquest procés matemàtic permet detectar errors immediatament després que el número sigui introduït. Aquesta comprovació es fa automàticament cada vegada que s'usa una targeta, ja sigui per fer una compra, una transferència o una operació bancària. És per això que l'algoritme de Luhn continua sent una eina fonamental en la seguretat i verificació del sistema financer modern.

Referències

[modifica]
  1. 1,0 1,1 Acosta, David. «El algoritmo de Luhn y su importancia en la validación de tarjetas de pago». PCI Hispano, 2017. Arxivat de l'original el 9 d'agost 2020. [Consulta: 4 abril 2020].
  2. «ISO/IEC 7812-1:2006 Identification cards — Identification of issuers — Part 1: Numbering system». International Organization for Standardization, 2006. [Consulta: 4 abril 2020].
  3. Gómez Urgellés, Joan. Matemáticas y códigos secretos (en espanyol). RBA Libros, 2018. ISBN 9788482986975.