Les clés de contrôle Grand Oral · mathématiques expertes, NSI, SES Un support de connaissances pour construire sa propre question

← 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.

Sommaire
  1. Les fautes que l'on veut attraper
  2. Le numéro de Sécurité sociale : modulo 97
  3. L'IBAN : des lettres et le reste 1
  4. L'ISBN-10 : modulo 11 et le X
  5. Le code-barres EAN-13 : des poids 1 et 3
  6. Les cartes bancaires : l'algorithme de Luhn
  7. Bilan : dénombrer les fautes qui passent
  8. Vérifier une clé et simuler des fautes
  9. En Python
  10. Des directions pour construire sa question
Les fautes que l'on veut attraper

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 : modulo 97 Un numéro à treize chiffres et une clé à deux chiffres

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$.

Un exemple à la main

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$ :

  • $10^2 = 100 \equiv 3$, donc $10^6 = (10^2)^3 \equiv 3^3 = 27$ ;
  • $2\,070\,575 = 97 \times 21\,346 + 13$, donc $2\,070\,575 \equiv 13$ ;
  • $56\,123 = 97 \times 578 + 57$, donc $56\,123 \equiv 57$.

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.

Ce que la clé modulo 97 détecte

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$123456789101112
$10^k$ mod 97103309902776813449550

Aucun de ces restes ne vaut $1$.

Avec la clé modulo $97$, toute erreur sur un seul chiffre de $N$ est détectée

É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.

Avec la clé modulo $97$, toute inversion de deux chiffres de $N$ est détectée, même éloignés

É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 : des lettres et le reste 1

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 :

  1. on déplace les quatre premiers caractères à la fin : 12345678901234567890123FR48 ;
  2. on remplace chaque lettre par un nombre, A par $10$, B par $11$, …, Z par $35$ : F devient $15$ et R devient $27$, d'où le nombre de $29$ chiffres 12345678901234567890123152748 ;
  3. l'IBAN est correct quand ce nombre a pour reste $1$ dans la division par $97$.

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 à diviserReste modulo 97
123456748
48 890123488
88 567890131
31 23152749
9 81

Le reste final vaut $1$ : l'IBAN est correct.

Comment la banque choisit la clé pour obtenir le reste $1$

É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.

L'ISBN-10 : modulo 11 et le X

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}.$$ Un exemple à la main

Pour l'ISBN inventé qui commence par 2-12345-680 (le $2$ désigne les pays francophones) :

Chiffre212345680
Poids1098765432
Produit2091621242524240

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.

L'ISBN-10 détecte toute erreur sur un chiffre et toute inversion de deux chiffres

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.

Le code-barres EAN-13 : des poids 1 et 3 Code-barres EAN-13 imprimé sur un emballage de thé Un code-barres EAN-13 sur un emballage de thé. Photo SchmiAlf, Wikimedia Commons, CC0.

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$.

Un exemple à la main Code-barres de l'ISBN 978-3-16-148410-0 Un ISBN-13 d'exemple et son code-barres. Image ISBN, Wikimedia Commons, domaine public.

Vérifions l'ISBN 978-3-16-148410-0 de l'image.

Chiffre978316148410
Poids131313131313
Produit9218911811281210

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.

L'EAN-13 détecte toute erreur sur un chiffre, mais pas toutes les inversions de chiffres voisins

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.

Les cartes bancaires : l'algorithme de Luhn

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$.

Un exemple à la main

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 :

Chiffre12345678
Doublé×2×2×2×2
Valeur22641658
Chiffre9012345
Doublé×2×2×2×2
Valeur9022641

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.

L'algorithme de Luhn détecte toute erreur sur un chiffre et toutes les inversions voisines sauf 09 et 90

Étape 1 : la fonction de doublement. Notons $f(x)$ la valeur d'un chiffre doublé :

$x$0123456789
$f(x)$0246813579

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$0123456789
$g(x)$ mod 100123467890

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.

Bilan : dénombrer les fautes qui passent
CléModuloUn chiffre fauxDeux voisins inversésFaute « au hasard »
NIR, IBAN97100 %100 %environ 99 %
ISBN-1011100 %100 %environ 91 %
EAN-1310100 %8/9 ≈ 89 %environ 90 %
Luhn10100 %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.

Vérifier une clé et simuler des fautes

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.

En Python

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.

def cle_nir(n13): return 97 - int(n13) % 97 def iban_valide(iban): s = iban.replace(" ", "") s = s[4:] + s[:4] # on déplace les 4 premiers caractères nombre = "" for c in s: if c.isdigit(): nombre += c else: nombre += str(ord(c) - ord("A") + 10) # A=10, ..., Z=35 return int(nombre) % 97 == 1 def cle_isbn10(n9): s = 0 for i in range(9): s += (10 - i) * int(n9[i]) c = (-s) % 11 return "X" if c == 10 else str(c) def somme_ean(n): s = 0 for i in range(len(n)): s += int(n[i]) * (1 if i % 2 == 0 else 3) return s def somme_luhn(n): s = 0 chiffres = n[::-1] # on part de la droite for i in range(len(chiffres)): d = int(chiffres[i]) if i % 2 == 1: # un chiffre sur deux est doublé d = 2 * d if d > 9: d = d - 9 s += d return s print("Clé NIR :", cle_nir("2070575056123")) print("IBAN valide :", iban_valide("FR48 1234 5678 9012 3456 7890 123")) print("Clé ISBN-10 :", cle_isbn10("212345680"), "et", cle_isbn10("212345608")) print("EAN valide :", somme_ean("9783161484100") % 10 == 0) print("Luhn valide :", somme_luhn("1234567890123452") % 10 == 0) # Inversions de deux chiffres voisins non détectées rates_ean = 0 rates_luhn = 0 for a in range(10): for b in range(10): if a != b: # EAN : positions de poids 1 et 3 ; Luhn : un doublé, un non doublé n1 = "97831614841" + str(a) + str(b) n2 = "97831614841" + str(b) + str(a) if somme_ean(n1) % 10 == somme_ean(n2) % 10: rates_ean += 1 m1 = "12345678901234" + str(a) + str(b) m2 = "12345678901234" + str(b) + str(a) if somme_luhn(m1) % 10 == somme_luhn(m2) % 10: rates_luhn += 1 print("EAN-13 : inversions voisines non détectées :", rates_ean, "sur 90") print("Luhn : inversions voisines non détectées :", rates_luhn, "sur 90")

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.

Des directions pour construire sa question

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 :

Pour l'échange avec le jury : les notions du cours à maîtriser

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.

Pour aller plus loin