Luhn

Luhn

Formule de Luhn

En mathématiques et plus précisément en arithmétique modulaire, la formule de Luhn est utilisée pour ses applications en cryptologie. L'algorithme de Luhn ou la formule de Luhn, aussi connu comme l'algorithme « modulo 10 » ou « mod 10 », fut développé dans les années 1960 comme une méthode de validation d'identification de nombres. C'est une simple formule de vérification de somme (Checksum) utilisée pour valider une variété de numéros de comptes, comme les numéros de cartes de crédit, les numéros d'assurance sociale canadiens ainsi que pour le calcul de validité d'un numéro SIRET. Beaucoup de sa notoriété provient de son adoption par les compagnies de cartes de crédit rapidement après sa création sur la fin des années 1960 par Hans Peter Luhn (1896–1964), un scientifique d'IBM.

L'algorithme fait partie du domaine public et est largement répandu aujourd'hui. Il n'a pas été conçu pour être une fonction de hachage sécurisée cryptologiquement ; il protège contre les erreurs aléatoires, pas contre les attaques malveillantes. La plupart des cartes de crédit et beaucoup de numéros d'identification gouvernementaux utilisent l'algorithme comme une simple méthode de distinction de nombres valides dans des collections de chiffres aléatoires.

Sommaire

Explications informelles

La formule génère un chiffre de vérification, qui est généralement annexé à un numéro de compte partiel pour générer un numéro de compte complet. Ce numéro de compte (complet, i.e. le numéro partiel et le chiffre de vérification) est soumis à l'algorithme suivant pour vérifier sa correction :

  1. on démarre avec le dernier chiffre (à droite) et on se déplace vers la gauche, en doublant la valeur de tous les chiffres de rang pair : le dernier est traité en 1er, il n'est pas doublé, l'avant-dernier (2e) sera doublé. Si le double d'un chiffre dépasse 10, on le remplace par la somme de ses chiffres. Par exemple, 1 111 devient 2 121, tandis que 8 763 devient 7 733 (car 2×6=12, et 1+2=3 ; 2×8=16, et 1+6=7).
  2. on additionne ensemble tous les chiffres du nombre ainsi obtenu. Par exemple, 1 111 devient 2 121, alors 2+1+2+1 ce qui nous donne 6 ; tandis que 8 763 devient 7 733, alors 7+7+3+3 ce qui nous donne 20.
  3. si le total est un multiple de 10, alors le nombre est valide, étant en accord avec la formule de Luhn, sinon il est invalide. Ainsi 1 111 n'est pas valide (comme montré ci-dessus, il aboutit à 6), tandis que 8 763 est valide (comme montré ci-dessus, il aboutit à 20).

Pour déterminer le chiffre de contrôle ajouté à la fin du numéro :

  1. calculer la somme comme décrit ci-dessus pour un chiffre de contrôle final égal à 0,
  2. si la somme n'est pas un multiple de 10, modifier ce chiffre pour obtenir un multiple de 10, soit 10 - (somme % 10)somme % 10 désigne le reste de la division entière de la somme calculée par 10.

Exemple :

  • Soit le numéro 54321x à calculer (x désignant le chiffre de contrôle à calculer),
  • Pour x = 0, la vérification de 543210 donne la somme 1 + 4 + 6 + 2 + 2 + 0 = 15 non multiple de 10,
  • On corrige le chiffre x = 10 - (15 % 10) = 10 - 5 = 5
  • Pour x = 5, la vérification de 543215 donne la somme 1 + 4 + 6 + 2 + 2 + 5 = 20 multiple de 10.

Algorithme

L'algorithme procède en trois étapes.

  1. L'algorithme multiplie par deux un chiffre sur deux, en commençant par l'avant dernier et en se déplaçant de droite à gauche. Si un chiffre qui est multiplié par deux est plus grand que neuf (comme c'est le cas par exemple pour 8 qui devient 16), alors il faut le ramener à un chiffre entre 1 et 9. Pour cela, il y a 2 manières de faire (pour un résultat identique) :
    1. Soit les chiffres composant le doublement sont additionnés (pour le chiffre 8: on obtient d'abord 16 en le multipliant par 2 puis 7 en sommant les chiffres composant le résultat : 1+6).
    2. Soit on lui soustrait 9 (pour le chiffre 8 : on obtient 16 en le multipliant par 2 puis 7 en soustrayant 9 au résultat).
  2. La somme de tous les chiffres obtenus est effectuée.
  3. Le résultat est divisé par 10. Si le reste de la division est égal à zéro, alors le nombre original est valide.


 function checkLuhn(string purportedCC) : boolean {
     int sum := 0
     int nDigits := length(purportedCC)
     int parity := nDigits AND 1
     for i from nDigits-1 to 0 {
         int digit := integer(purportedCC[i])
         if (i AND 1) = parity
             digit := digit × 2
         if digit > 9
             digit := digit - 9 
         sum := sum + digit
     }
     return (sum % 10) = 0
 }

Exemple

Considérons l'identification du nombre 972-487-086. La première étape consiste à doubler un chiffre sur deux en partant du deuxième jusqu'à la fin, et de faire la somme de tous les chiffres, doublés ou non (si un chiffre est supérieur à 9, on retranche 9, d'où la 3ème ligne). Le tableau suivant montre cette étape (les lignes colorées indiquent les chiffres doublés) :

Chiffre Somme
9 7 2 4 8 7 0 8 6
9 14 2 8 8 14 0 16 6
9 5 2 8 8 5 0 7 6 50

La somme, égale à 50, est divisée par 10 : le reste est 0, donc le nombre est valide.


Si par mégarde, deux chiffres ont été inversés, le code Luhn devient incorrect:

Chiffre Somme
9 2 7 4 8 7 0 8 6
9 4 7 8 8 14 0 16 6
9 4 7 8 8 5 0 7 6 54

La somme n'est pas divisible par 10 donc le nombre n'est pas valide.

Liens externes

Ce document provient de « Formule de Luhn ».

Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Luhn de Wikipédia en français (auteurs)

Игры ⚽ Нужен реферат?

Regardez d'autres dictionnaires:

  • Luhn — ist der Familienname folgender Personen: Hans Peter Luhn (1896–1964), deutscher Informatiker Rainer Luhn (* 1955), deutscher Sänger, Travestiekünstler, Autor und Regisseur Diese Seite ist eine Begriffsklärung zur Unterscheidun …   Deutsch Wikipedia

  • Luhn algorithm — The Luhn algorithm or Luhn formula, also known as the modulus 10 or mod 10 algorithm, is a simple checksum formula used to validate a variety of identification numbers, such as credit card numbers, IMEI numbers, National Provider Identifier… …   Wikipedia

  • Luhn-Formel — Der Luhn Algorithmus oder die Luhn Formel, auch bekannt als „Modulo 10“ oder „mod 10“ Algorithmus, wurde in den 1960er Jahren von Hans Peter Luhn als eine Methode der Überprüfung von Identifikationsnummern entwickelt. Er ist eine simple… …   Deutsch Wikipedia

  • Luhn-Algorithmus — Der Luhn Algorithmus oder die Luhn Formel, auch bekannt als „Modulo 10“ oder „mod 10“ Algorithmus und als Double Add Double Methode, wurde in den 1960er Jahren von Hans Peter Luhn als eine Methode der Überprüfung von Identifikationsnummern… …   Deutsch Wikipedia

  • Luhn mod N algorithm — The Luhn mod N algorithm is an extension to the Luhn algorithm (also known as mod 10 algorithm) that allows it to work with sequences of non numeric characters. This can be useful when a check digit is required to validate an identification… …   Wikipedia

  • Luhn — 1. Berufsübername zu mhd. lun »Achsnagel, Lünse« für den Wagenbauer. 2. Herkunftsname zu Ortsnamen wie Lüne, Luhne (Niedersachsen), Lünen (Nordrhein Westfalen). Aus Lünen nördlich von Dortmund kam wahrscheinlich Hildebrandus de Lune, Coesfeld a.… …   Wörterbuch der deutschen familiennamen

  • Hans Peter Luhn — (* 1. Juli 1896 in Barmen; † 19. August 1964) war ein deutscher Informatiker bei IBM, Erfinder des Luhn Algorithmus und der KWIC Indexierung. Ihm wurden über 80 Patente zugesprochen. Leben Luhn wurde 1896 als Sohn des Druckereibesitzers Peter… …   Deutsch Wikipedia

  • Hans Peter Luhn — (1er juillet 1896 à Wuppertal – 19 août 1964) est un informaticien allemand qui a travaillé pour la société IBM. On lui doit entre autres la Formule de Luhn, l algorithme d indexation de Luhn et la méthode de concordance index …   Wikipédia en Français

  • Hans Peter Luhn — (1 de julio de 1896 – 19 de agosto de 1964) fue un informático alemán. Trabajó para IBM y creó, entre las más de 80 patentes que le concedieron, el Algoritmo de Luhn. También fue documentalista científico, siendo el primero en emplear la… …   Wikipedia Español

  • Hans Peter Luhn — (July 1, 1896 ndash; August 19, 1964) was a computer scientist for IBM, and creator of the Luhn algorithm and KWIC (Key Words In Context) indexing. He was awarded over 80 patents.Hans Peter Luhn was born in Barmen, Germany (now part of Wuppertal) …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”