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.