1. Comment le code-barres est lu

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 | 한국어

Notation

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.

Seuls d3 à d12 comptent

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.

La dispersion sur 40 bits

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.

Chiffreb0 va versb1 va versb2 va versb3 va vers
d3R3 bit7R2 bit4R4 bit4R3 bit4
d4R0 bit5R2 bit0R3 bit6R3 bit3
d5R1 bit1R3 bit0R0 bit3R4 bit0
d6R1 bit3R1 bit5R0 bit0R4 bit3
d7R0 bit7R0 bit1R1 bit7R3 bit2
d8R1 bit4R2 bit3R4 bit5R2 bit2
d9R2 bit7R1 bit0R2 bit6R4 bit6
d10R0 bit2R4 bit1R3 bit1R3 bit5
d11R1 bit2R2 bit1R0 bit4R4 bit2
d12R0 bit6R4 bit7R1 bit6R2 bit5

Quarante bits se projettent sur quarante bits sans reste : l'application est une bijection. Aucune information n'est perdue, seulement réarrangée.

Après la dispersion, tout se joue dans l'ordre de lecture

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 lusUsageDétail
2Case objet ou case personnagePage 2
8Tirage pondéré du personnage
3Niveau de l'attaque spécialePage 3
9 × 3PV, BP, DP (neuf bits chacun)

L'EAN-8 (le code court à 8 chiffres)

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.

En bref. Le code-barres n'est pas une graine aléatoire. Quarante bits sont brassés vers des positions fixes puis relus dans un ordre fixe. Le processus est entièrement déterministe : le même code-barres donne toujours le même personnage.

→ Page 2 : le choix du personnage