Quels chiffres comptent, la dispersion sur 40 bits, et le cas de l'EAN-8
Remarque : cette page porte sur les codes JAN/EAN du commerce. Le Datach lit aussi un format propriétaire de cartes Bandai qui obéit à d'autres règles — voir 4. Le code-barres Bandai.
日本語 | English | Français | Español | Italiano | 한국어
Les 13 chiffres d'un code EAN-13 sont numérotés d1 à d13 en partant de la gauche. Pour 4902773230126, cela donne d1=4, d2=9, et ainsi de suite jusqu'à d13=6. Chaque chiffre vaut de 0 à 9 ; ses bits sont notés b0 (le moins significatif) à b3. Ainsi d6=7 donne b0=1, b1=1, b2=1, b3=0.
Premier fait important. Seuls d3 à d12 alimentent le calcul du personnage et des statistiques. Les deux premiers chiffres (le préfixe pays) et la clé de contrôle finale n'ont aucun effet sur le résultat. Ainsi 4902773230126 et 4502773230128 (préfixe changé en 45, clé recalculée) produisent exactement le même résultat. Les joueurs avaient constaté empiriquement que le préfixe pays « ne faisait rien » ; la lecture du programme confirme qu'il est bien implémenté ainsi.
Que la clé de contrôle ne serve pas au calcul ne veut pas dire qu'on peut la mettre au hasard. Le lecteur, placé en amont du calcul, la vérifie bel et bien, et une séquence qui échoue à ce contrôle s'arrête là. C'est pourquoi l'exemple ci-dessus recalcule sa clé après le changement de préfixe : un code dont on n'a modifié que la clé de contrôle ne sera même pas lu. Pour être précis, la clé de contrôle ne participe pas au calcul du résultat mais sert à valider la lecture. Ce point est apparu en cherchant l'origine des divergences dans les relevés ; le récit est sur la page en marge.
Les dix chiffres d3–d12 sont chacun découpés en quatre bits (b0–b3). Les 40 bits obtenus sont redistribués un bit à la fois dans cinq registres internes R0–R4, selon une table fixe.
C'est ce qui rendait le système si difficile à percer de l'extérieur. L'information de chiffres voisins est projetée vers des positions de bits éloignées : aucune expérimentation chiffre par chiffre ne fait ressortir un motif régulier.
La table complète. Les colonnes sont le bit source ; chaque case donne le registre et la position de bit de destination.
| Chiffre | b0 va vers | b1 va vers | b2 va vers | b3 va vers |
|---|---|---|---|---|
| d3 | R3 bit7 | R2 bit4 | R4 bit4 | R3 bit4 |
| d4 | R0 bit5 | R2 bit0 | R3 bit6 | R3 bit3 |
| d5 | R1 bit1 | R3 bit0 | R0 bit3 | R4 bit0 |
| d6 | R1 bit3 | R1 bit5 | R0 bit0 | R4 bit3 |
| d7 | R0 bit7 | R0 bit1 | R1 bit7 | R3 bit2 |
| d8 | R1 bit4 | R2 bit3 | R4 bit5 | R2 bit2 |
| d9 | R2 bit7 | R1 bit0 | R2 bit6 | R4 bit6 |
| d10 | R0 bit2 | R4 bit1 | R3 bit1 | R3 bit5 |
| d11 | R1 bit2 | R2 bit1 | R0 bit4 | R4 bit2 |
| d12 | R0 bit6 | R4 bit7 | R1 bit6 | R2 bit5 |
Quarante bits se projettent sur quarante bits sans reste : l'application est une bijection. Aucune information n'est perdue, seulement réarrangée.
R0–R4 sont ensuite traités comme un unique flux de 40 bits, consommé depuis le début (le bit de poids fort de R0). Cette consommation se répartit exactement sur 40 bits :
| Bits lus | Usage | Détail |
|---|---|---|
| 2 | Case objet ou case personnage | Page 2 |
| 8 | Tirage pondéré du personnage | |
| 3 | Niveau de l'attaque spéciale | Page 3 |
| 9 × 3 | PV, BP, DP (neuf bits chacun) |
Les codes à 8 chiffres que l'on trouve sur les cigarettes et les petits articles sont lisibles eux aussi. Le jeu prend les huit chiffres o1–o8 et les replie sur eux-mêmes pour fabriquer dix chiffres effectifs, puis applique exactement le même traitement que pour l'EAN-13. Les dix chiffres effectifs sont :
[o3, o4, o5, o6, o7, o8, o7, o6, o5, o4]
Un code EAN-8 ne porte donc que six chiffres d'information (o3–o8), et o4–o7 servent deux fois chacun. Conséquence curieuse : la clé de contrôle de l'EAN-8 (o8) participe bel et bien au calcul, contrairement au cas de l'EAN-13. Sur un code à 8 chiffres, une faute de frappe sur le seul o8 se manifeste donc par une statistique décalée — et c'est exactement la propriété qui a permis d'élucider les relevés divergents.