← Tous les textes du Grand Oral
MathsMaths expertesNSISES
Ce texte s'appuie sur l'option maths expertes : division euclidienne, congruences, nombres premiers, théorème de Gauss.
Numéro de Sécurité sociale, IBAN d'un compte bancaire, ISBN d'un livre, code-barres d'un paquet de biscuits, numéro de carte bancaire : tous se terminent par un ou deux chiffres qui ne contiennent aucune information. Ce sont des clés de contrôle. Elles sont calculées à partir des autres chiffres, et leur seul rôle est de signaler qu'un numéro a été mal recopié.
Derrière chaque clé se cache un petit théorème d'arithmétique : selon le nombre choisi pour le modulo ($97$, $11$ ou $10$) et selon les poids donnés aux chiffres, certaines fautes sont détectées à coup sûr, d'autres passent. Ce texte calcule chaque clé à la main sur un numéro inventé, puis démontre ce qu'elle détecte. Il rassemble des connaissances ; à chacun d'y choisir une direction et d'y construire sa question.
Quand on recopie un long numéro, au clavier ou à la main, deux fautes reviennent sans cesse :
En 1969, le mathématicien néerlandais Jacobus Verhoeff a classé des milliers d'erreurs réelles de saisie. Selon son étude, les erreurs sur un seul chiffre sont de loin les plus fréquentes, et les inversions de deux chiffres voisins viennent ensuite, autour d'une erreur sur dix ; les autres fautes (chiffre oublié, deux chiffres faux…) sont plus rares. Ces proportions sont des ordres de grandeur, mais elles fixent l'objectif : une bonne clé doit détecter toutes les fautes du premier type et, si possible, toutes celles du second.
Le principe est toujours le même. On choisit un entier $m$ et des poids, et la clé est calculée pour que la somme pondérée de tous les chiffres soit divisible par $m$ (ou ait un reste fixé). Une faute modifie cette somme d'une certaine quantité $\Delta$ : elle est détectée exactement quand $m$ ne divise pas $\Delta$. Toutes les démonstrations qui suivent se ramènent donc à une question d'arithmétique : quand $m$ divise-t-il $\Delta$ ?
Le numéro de Sécurité sociale (le NIR, numéro d'inscription au répertoire de l'Insee) a été créé en 1941 au sein du Service national des statistiques. Il a treize chiffres : le sexe, l'année et le mois de naissance, le département et la commune de naissance, puis un numéro d'ordre. Il est suivi d'une clé de deux chiffres. Si $N$ désigne le nombre formé par les treize chiffres, la clé est
$$K = 97 - r,$$où $r$ est le reste de la division de $N$ par $97$. Comme $0 \leqslant r \leqslant 96$, la clé est comprise entre $1$ et $97$ : elle tient bien sur deux chiffres. Et puisque $N \equiv r \pmod{97}$, on a
$$N + K \equiv r + 97 - r \equiv 0 \pmod{97}.$$La règle de vérification est donc simple : un numéro est correct quand $N + K$ est divisible par $97$.
Prenons le numéro inventé 2 07 05 75 056 123, donc $N = 2\,070\,575\,056\,123$. Diviser un nombre de treize chiffres par $97$ à la main est pénible ; les congruences permettent de découper le calcul. On écrit
$$N = 2\,070\,575 \times 10^6 + 56\,123.$$On calcule séparément trois restes modulo $97$ :
Les congruences sont compatibles avec la multiplication et l'addition, donc
$$\begin{aligned} N &\equiv 13 \times 27 + 57 \\ &\equiv 408 \equiv 20 \pmod{97}, \end{aligned}$$car $408 = 4 \times 97 + 20$. La clé vaut $K = 97 - 20 = 77$ : le numéro complet est 2 07 05 75 056 123 77. Pour les personnes nées en Corse, dont le département s'écrit 2A ou 2B, on remplace 2A par $19$ et 2B par $18$ avant le calcul.
Numérotons les chiffres de $N$ depuis la droite : le chiffre de rang $k$ compte pour $10^k$ (rang $0$ pour les unités). On aura besoin des restes des puissances de $10$ modulo $97$ :
| $k$ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| $10^k$ mod 97 | 10 | 3 | 30 | 9 | 90 | 27 | 76 | 81 | 34 | 49 | 5 | 50 |
Aucun de ces restes ne vaut $1$.
Étape 1 : ce que change la faute. Supposons que le chiffre $a$ de rang $k$ soit remplacé par un chiffre $b \neq a$. Le nombre $N$ devient $N' = N + (b - a) \times 10^k$, et la clé, elle, est restée $K$. On a donc
$$N' + K = (N + K) + (b - a) \times 10^k.$$Étape 2 : la faute passerait si $97$ divisait $(b - a) \times 10^k$. Puisque $97$ divise $N + K$, il divise $N' + K$ si et seulement s'il divise $(b - a) \times 10^k$.
Étape 3 : c'est impossible. Le nombre $97$ est premier et ne divise pas $10^k = 2^k \times 5^k$, dont les seuls facteurs premiers sont $2$ et $5$ : $97$ est donc premier avec $10^k$. D'après le théorème de Gauss, s'il divisait $(b - a) \times 10^k$, il diviserait $b - a$. Or $b - a$ est un entier non nul compris entre $-9$ et $9$ : il n'est pas multiple de $97$.
Conclusion : $N' + K$ n'est pas divisible par $97$, la faute est détectée. Une faute sur un chiffre de la clé est détectée elle aussi, puisque $K$ change alors que $N$ ne change pas.
Étape 1. Échangeons le chiffre $a$ de rang $i$ et le chiffre $b$ de rang $j$, avec $i > j$ et $a \neq b$. La valeur de $N$ change de
$$\begin{aligned} \Delta &= (b - a) \times 10^i + (a - b) \times 10^j \\ &= (b - a) \times 10^j \times (10^{i-j} - 1). \end{aligned}$$Étape 2. Comme dans la preuve précédente, $97$ ne divise ni $b - a$ ni $10^j$. Il reste à voir s'il peut diviser $10^{i-j} - 1$, c'est-à-dire si $10^{i-j} \equiv 1 \pmod{97}$.
Étape 3. Dans un numéro de treize chiffres, l'écart $d = i - j$ est compris entre $1$ et $12$. Le tableau ci-dessus montre qu'aucune puissance $10^d$ avec $1 \leqslant d \leqslant 12$ n'a pour reste $1$. Donc $97$ ne divise pas $10^{d} - 1$.
Étape 4. Le nombre premier $97$ ne divise aucun des trois facteurs de $\Delta$ ; par le théorème de Gauss appliqué deux fois, il ne divise pas leur produit. L'inversion est détectée. Pour deux chiffres voisins ($d = 1$), on retrouve simplement $\Delta = 9(b - a) \times 10^j$.
En prolongeant le tableau, on trouve que la première puissance de $10$ congrue à $1$ modulo $97$ est $10^{96}$ : on dit que $10$ est d'ordre $96$ modulo $97$. Une inversion ne pourrait passer que si les deux chiffres étaient séparés de $96$ rangs, ce qui n'arrive jamais dans un numéro de treize chiffres. C'est une raison du choix de $97$ : c'est le plus grand nombre premier inférieur à $100$, donc la clé tient sur deux chiffres tout en détectant le plus de fautes possible.
L'IBAN (numéro international de compte bancaire, norme ISO 13616) commence par deux lettres pour le pays, deux chiffres de clé, puis le numéro de compte national. En France, il a $27$ caractères. Prenons l'IBAN inventé
FR48 1234 5678 9012 3456 7890 123
Pour le vérifier, on suit trois étapes :
Aucune calculatrice ordinaire n'affiche $29$ chiffres exacts. On procède comme pour le NIR, par morceaux de sept chiffres : on calcule le reste du premier morceau, on l'écrit devant le morceau suivant, et ainsi de suite. Cela revient à utiliser $100\,a + b \equiv 100\,r + b$ lorsque $a \equiv r$.
| Nombre à diviser | Reste modulo 97 |
|---|---|
| 1234567 | 48 |
| 48 8901234 | 88 |
| 88 5678901 | 31 |
| 31 2315274 | 9 |
| 9 8 | 1 |
Le reste final vaut $1$ : l'IBAN est correct.
Étape 1. Après déplacement, la clé à deux chiffres $c$ se retrouve en dernière position. Si $Y$ désigne le nombre formé par tout ce qui la précède, le nombre à tester s'écrit $M = 100\,Y + c$.
Étape 2. La banque calcule d'abord le reste $r$ de $100\,Y$ modulo $97$ (c'est-à-dire le calcul précédent fait avec 00 à la place de la clé), puis pose $c = 98 - r$. Comme $0 \leqslant r \leqslant 96$, on a bien $2 \leqslant c \leqslant 98$.
Étape 3. On a alors
$$\begin{aligned} M &\equiv r + 98 - r \\ &\equiv 98 \equiv 1 \pmod{97}. \end{aligned}$$Dans l'exemple, le calcul avec 00 donne $r = 50$, d'où la clé $98 - 50 = 48$.
Les arguments donnés pour le NIR s'appliquent à la partie chiffrée de l'IBAN : une erreur sur un chiffre est toujours détectée, et une inversion de deux chiffres aussi tant qu'ils sont séparés de moins de $96$ rangs. Un IBAN mal recopié est donc rejeté par la banque avant même que le virement ne parte, ce qui évite d'envoyer de l'argent sur le compte d'un inconnu.
De 1970 à 2006, chaque livre recevait un ISBN de dix caractères (norme ISO 2108). Les neuf premiers chiffres $x_1, x_2, \dots, x_9$ désignent la langue, l'éditeur et le titre ; le dixième, $x_{10}$, est la clé. On donne aux chiffres les poids $10, 9, 8, \dots, 1$, et la clé est choisie pour que
$$S = \sum_{i=1}^{10} (11 - i)\, x_i \equiv 0 \pmod{11}.$$Pour l'ISBN inventé qui commence par 2-12345-680 (le $2$ désigne les pays francophones) :
| Chiffre | 2 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 0 |
|---|---|---|---|---|---|---|---|---|---|
| Poids | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
| Produit | 20 | 9 | 16 | 21 | 24 | 25 | 24 | 24 | 0 |
La somme des produits vaut $163 = 11 \times 14 + 9$. La clé, de poids $1$, doit compléter jusqu'au multiple de $11$ suivant, $165$ : elle vaut $2$, et l'ISBN est 2-12345-680-2.
Le reste peut aussi valoir $10$, qui ne s'écrit pas avec un seul chiffre. On écrit alors la lettre X, le chiffre romain de dix. Ainsi, pour 2-12345-608, la somme vaut $155 = 11 \times 14 + 1$, il manque $10$ pour atteindre $165$, et l'ISBN s'écrit 2-12345-608-X.
Erreur sur un chiffre. Si le chiffre de poids $w$ passe de $a$ à $b \neq a$, la somme $S$ varie de $\Delta = w(b - a)$. Le nombre $11$ est premier, et ne divise ni $w$ (compris entre $1$ et $10$) ni $b - a$ (non nul, compris entre $-10$ et $10$). Par le théorème de Gauss, il ne divise pas $\Delta$ : la faute est détectée.
Inversion. Si l'on échange le chiffre $a$ de poids $w$ et le chiffre $b$ de poids $w'$, avec $a \neq b$ et $w \neq w'$, la somme varie de
$$\begin{aligned} \Delta &= w b + w' a - w a - w' b \\ &= (w - w')(b - a). \end{aligned}$$Les poids étant distincts et compris entre $1$ et $10$, $w - w'$ est un entier non nul entre $-9$ et $9$, donc non divisible par $11$. Le même argument conclut : toutes les inversions sont détectées, voisines ou non.
Le prix à payer est ce onzième symbole, le X, qui n'est pas un chiffre : c'est exactement parce que $11$ est premier et dépasse $10$ que la clé est si efficace.
Les codes-barres des produits du commerce (EAN-13) ont treize chiffres, le dernier étant la clé. Depuis le 1er janvier 2007, les livres ont un ISBN de treize chiffres qui est aussi un code EAN-13, commençant par $978$ ou $979$. Les poids sont $1, 3, 1, 3, \dots$ en partant de la gauche, et la clé est choisie pour que la somme pondérée soit un multiple de $10$.
Vérifions l'ISBN 978-3-16-148410-0 de l'image.
| Chiffre | 9 | 7 | 8 | 3 | 1 | 6 | 1 | 4 | 8 | 4 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Poids | 1 | 3 | 1 | 3 | 1 | 3 | 1 | 3 | 1 | 3 | 1 | 3 |
| Produit | 9 | 21 | 8 | 9 | 1 | 18 | 1 | 12 | 8 | 12 | 1 | 0 |
La somme vaut $100$, déjà multiple de $10$ : la clé est $0$, comme sur l'image. La caisse d'un supermarché fait ce calcul à chaque passage d'article ; si la lecture du code-barres donne une somme non multiple de $10$, elle émet un bip d'erreur et l'on repasse l'article.
Erreur sur un chiffre. La somme varie de $\Delta = w(b - a)$ avec $w = 1$ ou $w = 3$, et $b - a$ non nul entre $-9$ et $9$. Si $w = 1$, $10$ ne divise pas $b - a$. Si $w = 3$ : comme $\mathrm{PGCD}(3\,;10) = 1$, le théorème de Gauss montre que si $10$ divisait $3(b - a)$, il diviserait $b - a$, ce qui est faux. Toute erreur sur un chiffre est détectée.
Inversion de deux chiffres voisins. Deux chiffres voisins ont les poids $1$ et $3$. Le calcul fait pour l'ISBN-10 donne
$$\Delta = (3 - 1)(b - a) = 2(b - a).$$Or $10$ divise $2(b - a)$ si et seulement si $5$ divise $b - a$, c'est-à-dire, pour deux chiffres distincts, si $b - a = 5$ ou $b - a = -5$. L'inversion de 27 en 72 passe donc inaperçue !
Dénombrement. Il y a $10 \times 9 = 90$ couples ordonnés $(a\,;b)$ de chiffres distincts. Ceux qui vérifient $|b - a| = 5$ sont (0 ;5), (1 ;6), (2 ;7), (3 ;8), (4 ;9) et leurs symétriques, soit $10$. Si tous les couples étaient également probables, la proportion d'inversions voisines détectées serait $\frac{80}{90} = \frac{8}{9}$, environ $89\,\%$.
Pire, deux chiffres séparés d'un rang ont le même poids : les échanger ne change pas la somme. Le passage de l'ISBN-10 à l'ISBN-13 a donc un peu affaibli la détection des fautes, au profit de la compatibilité avec les caisses enregistreuses du monde entier.
En 1954, l'ingénieur d'IBM Hans Peter Luhn dépose le brevet d'un appareil « pour vérifier les numéros », accordé en 1960. Son algorithme est utilisé aujourd'hui pour les numéros de cartes bancaires, et aussi pour le numéro SIREN des entreprises françaises. Il fonctionne modulo $10$, mais en traitant les chiffres d'une manière plus astucieuse que l'EAN-13.
La règle. En partant de la droite, on double un chiffre sur deux, en commençant par le chiffre placé juste avant la clé. Quand un double dépasse $9$, on lui retire $9$ (ce qui revient à additionner ses deux chiffres : $7 \times 2 = 14$ donne $1 + 4 = 5 = 14 - 9$). On additionne tout, clé comprise : le numéro est correct quand la somme est un multiple de $10$.
Calculons la clé du numéro inventé 1234 5678 9012 345 (quinze chiffres, la clé sera le seizième). En partant du $5$ final, on double un chiffre sur deux :
| Chiffre | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| Doublé | ×2 | ×2 | ×2 | ×2 | ||||
| Valeur | 2 | 2 | 6 | 4 | 1 | 6 | 5 | 8 |
| Chiffre | 9 | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|---|
| Doublé | ×2 | ×2 | ×2 | ×2 | |||
| Valeur | 9 | 0 | 2 | 2 | 6 | 4 | 1 |
Par exemple $5 \times 2 = 10$ donne $10 - 9 = 1$, et $9 \times 2 = 18$ donne $9$. La somme vaut $58$ ; pour atteindre $60$, la clé est $2$ : le numéro complet est 1234 5678 9012 3452. Les sites marchands font ce calcul dans le navigateur avant même d'interroger la banque.
Étape 1 : la fonction de doublement. Notons $f(x)$ la valeur d'un chiffre doublé :
| $x$ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| $f(x)$ | 0 | 2 | 4 | 6 | 8 | 1 | 3 | 5 | 7 | 9 |
Les dix valeurs de $f$ sont distinctes : $f$ est une permutation des chiffres.
Étape 2 : erreur sur un chiffre. Si un chiffre non doublé passe de $a$ à $b$, la somme varie de $b - a$ ; s'il est doublé, de $f(b) - f(a)$. Dans les deux cas, c'est un entier non nul (car $f$ est une permutation) compris entre $-9$ et $9$ : il n'est pas multiple de $10$. La faute est détectée.
Étape 3 : inversion de deux chiffres voisins. L'un est doublé, l'autre non. Avant l'échange, ils apportent $f(a) + b$ ; après, $f(b) + a$. La faute passe si et seulement si
$$f(a) - a \equiv f(b) - b \pmod{10}.$$Posons $g(x) = f(x) - x$. Pour $x \leqslant 4$, $g(x) = 2x - x = x$ ; pour $x \geqslant 5$, $g(x) = 2x - 9 - x = x - 9$. Modulo $10$, les valeurs sont donc
| $x$ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| $g(x)$ mod 10 | 0 | 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 0 |
La seule valeur atteinte deux fois est $0$, pour $x = 0$ et $x = 9$. Seules les inversions de 09 en 90 et réciproquement passent : $2$ couples sur $90$, soit environ $97{,}8\,\%$ d'inversions voisines détectées.
En « mélangeant » les chiffres par la permutation $f$, Luhn obtient donc presque l'efficacité de l'ISBN-10 sans avoir besoin d'un onzième symbole. Peut-on faire mieux modulo $10$ ? Oui : Verhoeff en 1969 puis Damm en 2004 ont proposé des clés à un chiffre qui détectent toutes les erreurs sur un chiffre et toutes les inversions voisines. Elles reposent sur des tables plus compliquées que des additions, ce qui explique qu'elles soient moins répandues.
| Clé | Modulo | Un chiffre faux | Deux voisins inversés | Faute « au hasard » |
|---|---|---|---|---|
| NIR, IBAN | 97 | 100 % | 100 % | environ 99 % |
| ISBN-10 | 11 | 100 % | 100 % | environ 91 % |
| EAN-13 | 10 | 100 % | 8/9 ≈ 89 % | environ 90 % |
| Luhn | 10 | 100 % | 88/90 ≈ 98 % | environ 90 % |
La dernière colonne concerne une faute quelconque qui brouille le numéro (plusieurs chiffres faux, par exemple). On peut alors considérer que la somme pondérée prend une valeur « au hasard » modulo $m$ : elle tombe sur le bon reste avec une probabilité d'environ $\frac{1}{m}$. Une clé modulo $97$ laisse passer environ une faute sur $97$, une clé modulo $10$ environ une sur $10$. C'est le compromis de toute clé : plus le modulo est grand, plus la clé est longue et plus elle est sûre.
Il faut aussi rappeler ce qu'une clé n'est pas : elle ne protège contre aucune fraude. N'importe qui peut calculer la clé d'un numéro inventé, comme nous l'avons fait dans tout ce texte. Un numéro de carte qui passe le test de Luhn n'est pas pour autant une vraie carte : pour empêcher la fraude, il faut de la cryptographie, avec des clés secrètes.
L'outil ci-dessous fait tous les calculs dans votre navigateur : rien n'est envoyé nulle part. Il est prérempli avec les numéros inventés du texte. N'y tapez pas de vrai numéro personnel : ce n'est pas utile pour comprendre. Le bouton de simulation produit $1\,000$ fautes au hasard sur le numéro affiché (un chiffre remplacé, ou deux chiffres voisins inversés) et compte celles que la clé détecte.
Quelques essais : dans l'EAN-13 978-3-16-148410-0, échangez le $1$ et le $6$ voisins (978-3-61-148410-0) : leur différence vaut $5$, et la clé ne voit rien. Dans le numéro de carte 1234 5678 9012 3452, échangez le $9$ et le $0$ : c'est l'unique inversion que Luhn laisse passer. Dans l'ISBN-10, en revanche, aucune inversion ne passe. La simulation sur un numéro donné ne redonne pas exactement les pourcentages du bilan, qui supposent tous les couples de chiffres également probables : avec l'EAN-13 de l'exemple, seules $8$ des $11$ inversions possibles sont détectées (environ $73\,\%$), parce que ce numéro contient trois paires de voisins qui diffèrent de $5$ : 83, 16 et 61. Comparez avec un autre code-barres pris dans votre cuisine.
Le programme suivant calcule les clés des exemples du texte, puis compte, pour l'EAN-13 et pour Luhn, les inversions de deux chiffres voisins qui ne sont pas détectées, en essayant les $90$ couples de chiffres distincts.
On retrouve $10$ couples sur $90$ pour l'EAN-13 et $2$ sur $90$ pour Luhn, comme dans les démonstrations. On peut modifier le programme pour tester des inversions de chiffres séparés d'un rang : avec l'EAN-13, aucune n'est détectée.
Ce texte n'est pas un Grand Oral. Il rassemble des connaissances dans lesquelles chacun peut choisir une direction, la creuser et formuler sa propre question. Quelques directions possibles :
Le jury peut interroger sur les chapitres mobilisés. Avec ce thème, il est utile de connaître parfaitement, en maths expertes : la division euclidienne et les congruences (compatibilité avec l'addition et la multiplication), les nombres premiers, le théorème de Gauss, la notion d'inverse modulo un entier. Côté spécialité, le dénombrement (couples, principe multiplicatif), les probabilités et l'algorithmique en Python (boucles, chaînes de caractères) sont souvent sollicités.
Pour réviser les chapitres de spécialité, l'application Maths FlashBac reprend tout le cours en cartes.