Image ventilateur qui tourne fond du ventilateur Circuit imprimé (image de titrage diode verte diode rouge
Administration

Algorithme de Luhn

INFORMATIQUE > ALGORITHMIQUE

(on dit aussi formule de Luhn, code de Luhn, algorithme modulo 10 ou algorithme mod 10) Algorithme permettant de calculer une somme de contrôle qui sert à valider différents numéros de compte comme les numéros de cartes bancainres, les numéros SIRET, les numéros d'assurance sociale canadiens, les numéros IMEI,...

Cet algorithme permet de calculer un chiffre (une somme de contrôle) que l'on ajoute à une suite de chiffres (un numéro).

Une somme de contrôle est un nombre (1 chiffre dans le cas de l'algorithme de Luhn) que l'on ajoute à une suite de chiffres et qui est calculée à l'aide des chiffres de cette suite (elle ajoute de la redondance à la suite). Son recalcul quand on saisit cette suite ou qu'on la transmet permet de détecter les erreurs de saisie ou de transmission.

L'algorithme de Luhn a été inventé par Hans Peter Luhn (d'où son nom), un ingénieur IBM allemand.

Il ne permet pas de déterminer si un numéro de carte bancaire est attribué et encore moins si la carte est utilisable. Il permet seulement de détecter des erreurs de saisie et de faire une première vérification avant de faire une tentative de transaction.

L'algorithme

- On multiplie par 2 un chiffre sur 2 en commençant pat l'avant-dernier et en allant de droite à gauche. Si le produit est plus grand que 9, on additionne les 2 chiffres du nombre obtenu ou on soustrait 9 du produit.

- On additionne tous les chiffres obtenus.

- On divise la somme obtenue par 10.

- Si le reste de la division est 0, le nombre original est valide.

Exemple

Vérification du numéro de carte bleue 4990 1102 0183 0859

Multiplication d'un chiffre sur 2 par 2 en commençant par l'avant-dernier :

9 inchangé -> 9

5 x 2 = 10 -> 1

8 inchangé -> 8

0 x 2 = 0 -> 0

3 inchangé -> 3

8 x 2 = 16 -> 7

1 inchangé -> 1

0 x 2 -> 0

2 inchangé -> 2

0 x 2 = 0 -> 0

1 inchangé -> 1

1 x 2 = 2 -> 2

0 inchangé -> 0

9 x 2 = 18 -> 9

9 inchangé -> 9

4 x 2 = 8 -> 8

Le total est : 9 + 1 + 8 + 0 + 3 + 7 + 1 + 0 + 2 + 0 + 1 + 2 + 0 + 9 + 9 + 8 = 60

La division par dix donne 6 avec le reste 0. Ce numéro est valide.

Pour en savoir plus

Implémentation de l'algorithme en 122 langages...

Wikipedia

Anglais
Luhn algorithm or Luhn formula.
Allemand
Der Luhn-Algorithmus oder die Luhn-Formel,
Espagnol
El algoritmo de Luhn o fórmula de Luhn.