Outils de vérification de numéros par l'algo de Luhn. L'algorithme de Luhn (modulo 10 ou mod 10) est une formule de validation de nombres utilisée notamment pour les cartes bancaires et les numéros administratifs (SIRET).
Algorithme de Luhn (Vérification de Numéros) - dCode
Catégorie(s) : Somme de Contrôle, Arithmétique
dCode est gratuit et ses outils sont une aide précieuse dans les jeux, les maths, les énigmes, les géocaches, et les problèmes à résoudre au quotidien !
Une suggestion ? un problème ? une idée ? Écrire à dCode !
L'algorithme de Luhn (ou formule de Luhn ou clé de Luhn) est un algorithme de vérification utilisé pour valider divers numéros (comme les cartes de crédit).
Son principe est de calculer, à partir d'un nombre (ou une suite de chiffre), une clé de contrôle (appelé checksum) qui permet de vérifier que le numéro est correct (car la clé est un chiffre qui est dépendant des autres).
Inventé par Hans Peter Luhn en 1954 et reste largement utilisé dans les systèmes de traitement des données.
Luhn permet de vérifier des numéros (carte bancaire, SIREN, SIRET, IMEI, etc.) grâce à la clé de contrôle (le chiffre qui permet de vérifier les autres chiffres). Si un caractère est mal lu ou mal écrit, alors l'algorithme de Luhn pourra détecter cette erreur.
Luhn est connu car MasterCard, American Express (AMEX), Visa et toutes les cartes bancaires l'utilisent.
Exemple : 12345674 est un numéro de carte valide, 1234567 est le numéro initial et 4 est la clé de contrôle.
L'algorithme de Luhn permet de détecter rapidement les erreurs de saisie, les fautes de frappe ou les numéros invalides avant d'effectuer des opérations critiques, comme le traitement de paiements par carte de crédit ou l'identification des utilisateurs.
Exemple : Si un utilisateur entre 13245674 (avec 2 et 3 inversés), alors le programme calcule la clé de Luhn pour 1324567 et trouve 5 au lieu de 4 attendu, le numéro est détecté comme invalide et donc le code a mal été recopié.
L'algorithme de Luhn commence par la fin du numéro. Prendre le dernier chiffre et se déplacer vers la gauche. Doubler la valeur de tous les chiffres de rang pair. Si le double d'un chiffre est supérieur ou égal à 10, le remplacer par la somme de ses chiffres. Réaliser la somme $ s $ de tous les chiffres obtenus. La clé de contrôle $ c $ est égale à $ c = (10 - (s \mod 10)) \mod 10 $
Exemple : Calculer X pour le nombre 853X, en posant d'abord X=0.
Prendre le 3, le doubler pour obtenir 6.
Prendre le 5, non doublé.
Enfin, doubler le 8 (8*2=16 et 1+6=7) pour obtenir 7.
La somme est 6+5+7 = 18. Comme 18 modulo 10 = 8, calculer 10 - 8 = 2, la clé de contrôle X est donc 2. Ainsi 8532 est valide selon Luhn.
8 | 5 | 3 | 0 |
8*2=16 | reste 5 | 3*2=6 | reste 0 |
1+6=7 | 5 | 6 | 0 |
s=7 | +5 | +6 | +0=18 |
c=10-(18%10)=2 |
Indiquer le numero, calculer la clé de Luhn (ou utiliser le générateur sur cette page) et concaténer la valeur trouvée au numéro.
L'algorithme de vérification ne permet pas la détection de certaines permutations de chiffres.
Exemple : Les nombres 0123456789 et 9123456780 ont tous les 2 une somme de controle de valeur 7. De manière générale, c'est le cas des paires 09 et 90 : tout nombre contenant un 0 remplacé par un 9 et un 9 remplacé par un 0 possède une somme de controle identique.
Une autre faiblesse est la non détection d'une erreur double comme 22 de/vers 55 ou 33 de/vers 66 ou encore 44 de/vers 77.
Exemple : 001122 et 001155 ont la même somme de controle.
La présence ou non de zéros initiaux 0 au début du nombre ne modifie par la somme de controle. Ce peut être un avantage comme un inconvénient.
Exemple : 000123 et 123 ont la même somme de controle.
Les codes CVC (Card Validation Code) ou CVV (Card Validation Value) ou cryptogramme visuel sont des codes à 3 chiffres au dos des cartes bancaires. Ils sont générés par les banques, Visa et MasterCard ont leur propre algorithme (à base de clé privée) utilisant notamment le numéro de compte personnel, la date d'expiration de la carte et le code de service, ces informations sont ensuite comparées par celles calculées par l'établissement bancaire. Il existe même des banques qui proposent de changer ces nombres à volonté.
L'algorithme de Luhn n'est pas utilisé pour calculer ces numéros, ils sont donc impossibles à calculer sans connaitre la méthode de génération (et souvent la clé privée associée).
La date d'expiration (exp) n'est rien d'autre qu'une information figurant sur la carte, indiquant le mois et l'année jusqu'auxquels la carte est valide. Ce n'est pas une valeur dépendant de l'algorithme de Luhn, elle n'est pas calculable. Sa valeur est écrite sur le devant de la carte au format mm/aa.
La bonne pratique pour générer un code de carte cadeau est de générer un nombre aléatoire et d'y associer une somme de contrôle comme l'algorithme de Luhn. Le code de la carte cadeau est alors stocké dans une base de données avec ses données (argent, nom, points fidélité, etc.). L'utilisation de Luhn permet de s'assurer que le code cadeau est bien écrit s'il doit être tapé par un humain ou lu par une machine.
Une personne voulant retrouver l'algorithme de génération ne pourra alors pas y parvenir, le nombre aléatoire assurant une trop faible probabilité de réussite.
NB : tous les codes de carte cadeaux ne sont malheureusement pas basés sur un code aléatoire et s'ils sont déterministes, ils sont alors soumis à une faille de sécurité permettant d'en faire le reverse engineering et d'en générer à volonté.
Non, dans la bande magnétique se trouve les informations de la carte bancaire complétées par une somme de controle différente : le Longitudinal redundancy check.
dCode se réserve la propriété du code source pour "Algorithme de Luhn (Vérification de Numéros)". Sauf code licence open source explicite (indiqué Creative Commons / gratuit), l'algorithme pour "Algorithme de Luhn (Vérification de Numéros)", l'applet ou snippet (convertisseur, solveur, chiffrement / déchiffrement, encodage / décodage, encryptage / décryptage, traducteur) ou les fonctions liées à "Algorithme de Luhn (Vérification de Numéros)" (calculer, convertir, résoudre, décrypter / encrypter, déchiffrer / chiffrer, décoder / encoder, traduire) codés en langage informatique (Python, Java, C#, PHP, Javascript, Matlab, etc.) ou les données, en téléchargement, script, ou les accès API à "Algorithme de Luhn (Vérification de Numéros)" ne sont pas publics, idem pour un usage hors ligne, PC, mobile, tablette, appli iPhone ou Android !
Rappel : dCode est gratuit.
Le copier-coller de la page "Algorithme de Luhn (Vérification de Numéros)" ou de ses résultats est autorisée (même pour un usage commercial) tant que vous créditez dCode !
L'exportation des résultats sous forme de fichier .csv ou .txt est gratuite en cliquant sur l'icone export
Citer comme source bibliographique :
Algorithme de Luhn (Vérification de Numéros) sur dCode.fr [site web en ligne], consulté le 21/11/2024,