Leçon
La théorie — Clé de contrôle : Luhn, codes-barres, ISBN et les erreurs qu'ils ignorent
Un chiffre de contrôle est un chiffre supplémentaire choisi pour que le nombre entier respecte une règle. Ici, cette règle veut que les chiffres, chacun multiplié ou transformé selon sa position, s'additionnent pour former un multiple du modulo, 10 ou 11. Une erreur qui enfreint la règle est détectée. Une erreur qui la respecte ne l'est pas. Un chiffre de contrôle peut donc prouver qu'un nombre est faux, mais ne peut jamais prouver qu'il est juste.
Ce que signifie chaque symbole
dᵢ- le chiffre à i positions en partant de la droite ; le chiffre de contrôle est d0
wᵢ- le poids de la position i : 1 et 3 en alternance pour un code-barres, i + 1 pour l'ISBN-10
D(d)- le doublement de Luhn : 2d, moins 9 lorsque le résultat dépasse 9, donnant 0 2 4 6 8 1 3 5 7 9
S- la somme des contributions de chaque chiffre
m- le modulo, 10 pour Luhn et le code-barres, 11 pour l'ISBN-10 ; le nombre est valide lorsque S est un multiple de m
- Suppose
- Une erreur à la fois. Deux erreurs dans un même nombre peuvent s'annuler, et les totaux de cette page n'en tiennent pas compte. L'échelle considère chaque paire de chiffres comme équiprobable, ce qui n'est pas le cas lors d'une saisie réelle. La seule paire de voisins que Luhn ignore est 09 et 90, et la fréquence à laquelle ces deux chiffres se retrouvent côte à côte dépend de la nature des nombres.
- Ne tient plus quand
- Un chiffre de contrôle n'est pas une mesure de sécurité. Quiconque connaît l'algorithme peut créer un nombre valide. C'est pourquoi un numéro de carte validé par Luhn signifie uniquement qu'il a été saisi correctement. L'ISBN-13 utilise l'algorithme du code-barres car un ISBN-13 est lui-même un numéro de code-barres, sous les préfixes 978 et 979 mis à disposition par GS1.
Problème entièrement résolu
-
Retrouver un chiffre effacé sur un ISBN-10 4 étapes
Un ISBN-10 indique 0-11-000?22-9, avec le septième chiffre effacé. Trouvez-le et expliquez pourquoi il existe exactement une réponse. Cliquez sur ISBN-10 pour vérifier le résultat.
Ouvrez ce problème dans l'outil
-
Les poids vont de 10 à 1 en partant de la gauche. Le septième chiffre effacé a donc un poids de 4. Additionnez les neuf autres chiffres multipliés par leur poids.
-
La somme totale doit être un multiple de 11. Ainsi, 4 fois le chiffre manquant doit compenser la différence.
-
Modulo 11, vous pouvez diviser car 11 est premier : 4 × 3 = 12, soit 1 de plus que 11. Multiplier par 3 annule donc la multiplication par 4.
-
Remettez le 2 en place et la somme de la page vaut 44, soit exactement quatre fois 11.
Réponse
Le chiffre est 2, et l'ISBN est 0-11-000222-9. C'est le seul chiffre qui convient car multiplier par 4 envoie les onze valeurs de 0 à 10 vers onze restes différents modulo 11. L'une d'entre elles tombe donc exactement sur 8. C'est la même propriété qui permet à l'algorithme de détecter chaque chiffre faux à cette position, vue sous un autre angle. Un poids qui rend chaque erreur visible permet également de retrouver chaque chiffre effacé. Un algorithme modulo 10 avec un poids de 2 à cet endroit donnerait deux candidats ou aucun, et il laisserait passer chaque chiffre faux distant de cinq du bon chiffre.
-
Références (3)
- The Luhn check digit as the IMEI standard defines it, step by step, with the worked example the page's IMEI preset reproduces (26053179311383, sum 53, check digit 7): 3GPP TS 23.003, "Numbering, addressing and identification", Annex B (normative): IMEI Check Digit computation. Published as ETSI TS 123 003 V18.7.0 (2024-09).
- The ISBN-13 check digit, the 1-3 weighting that barcodes use, with the manual's own example 978-0-11-000222-4: International ISBN Agency, ISBN Users' Manual, International Edition, sixth edition. London, 2012. Appendix 1, "Check digit calculation".
- ISBN-10's mod 11, the barcode's blind pairs 05, 16, 27, 38, 49 and Luhn's 09 and 90, the frequencies of real mistakes from Verhoeff's study, Gumm's theorem that no even-modulus scheme catches every swap, and Verhoeff's dihedral scheme with its tables: J. A. Gallian, "Error detection methods." ACM Computing Surveys 28(3), 1996, pp. 504-517. DOI 10.1145/243439.243457