1. Come viene letto il codice a barre

Quali cifre contano, la dispersione a 40 bit e il caso dell'EAN-8

Nota: questa pagina riguarda i codici JAN/EAN commerciali. Il Datach legge anche un formato proprietario per le carte Bandai che segue regole diverse — vedi 4. Il codice a barre Bandai.

日本語 | English | Français | Español | Italiano | 한국어

Notazione

Le 13 cifre di un codice EAN-13 sono numerate da d1 a d13 partendo da sinistra. Per 4902773230126 significa d1=4, d2=9, e così via fino a d13=6. Ogni cifra vale da 0 a 9; i suoi bit si scrivono b0 (il meno significativo) fino a b3. Quindi d6=7 dà b0=1, b1=1, b2=1, b3=0.

Contano solo d3-d12

Primo fatto importante. Solo d3-d12 alimentano il calcolo del personaggio e delle statistiche. Le due cifre iniziali (il prefisso paese) e la cifra di controllo finale non hanno effetto sul risultato. Così 4902773230126 e 4502773230128 (prefisso cambiato in 45, cifra di controllo ricalcolata) producono esattamente lo stesso risultato. I giocatori avevano capito per prova ed errore che il prefisso paese «non faceva nulla»; leggere il programma conferma che è implementato proprio così.

Che la cifra di controllo non serva al calcolo non significa che la si possa scegliere a piacere. Il lettore, che sta prima del calcolo, la verifica eccome, e una sequenza che non supera quel controllo si ferma lì. Per questo nell'esempio sopra la cifra di controllo è ricalcolata dopo il cambio di prefisso: un codice in cui sia stata modificata solo la cifra di controllo non verrà nemmeno letto. Per essere precisi, la cifra di controllo non partecipa al calcolo del risultato ma serve a validare la lettura. La cosa è emersa inseguendo le discordanze nelle registrazioni; il racconto è nella pagina delle curiosità.

La dispersione a 40 bit

Le dieci cifre d3–d12 vengono divise ciascuna in quattro bit (b0–b3). I 40 bit risultanti sono ridistribuiti un bit alla volta in cinque registri interni R0–R4, secondo una tabella fissa.

È questo che rendeva il sistema così difficile da capire dall'esterno. L'informazione di cifre vicine viene scagliata in posizioni di bit lontane, così nessun esperimento cifra per cifra fa mai emergere uno schema regolare.

La tabella completa. Le colonne sono il bit di origine; ogni cella indica registro e posizione di bit di destinazione.

Cifrab0 va ab1 va ab2 va ab3 va a
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

Quaranta bit si mappano su quaranta bit senza avanzi: la corrispondenza è biunivoca. Nessuna informazione viene scartata, solo riordinata.

Dopo la dispersione, decide tutto l'ordine di lettura

R0–R4 vengono poi trattati come un unico flusso di 40 bit, consumato dall'inizio (il bit più significativo di R0). Il consumo copre esattamente 40 bit:

Bit lettiUsoDettaglio
2Casella oggetto o casella personaggioPagina 2
8Estrazione pesata del personaggio
3Livello della tecnica specialePagina 3
9 × 3HP, BP, DP (nove bit ciascuno)

L'EAN-8 (il codice corto a 8 cifre)

Anche i codici a 8 cifre di sigarette e piccoli articoli sono leggibili. Il gioco prende le otto cifre o1–o8 e le ripiega su sé stesse per costruire dieci cifre effettive, poi esegue esattamente lo stesso processo dell'EAN-13. Le dieci effettive sono:

[o3, o4, o5, o6, o7, o8, o7, o6, o5, o4]

Un codice EAN-8 porta quindi solo sei cifre di informazione (o3–o8), e o4–o7 sono usate due volte ciascuna. Conseguenza curiosa: la cifra di controllo dell'EAN-8 (o8) partecipa eccome al calcolo, a differenza del caso EAN-13. Su un codice a 8 cifre, sbagliare la sola o8 si manifesta come una statistica spostata — ed è esattamente la proprietà che ha permesso di sciogliere le registrazioni discordanti.

In breve. Il codice a barre non è un seme casuale. Quaranta bit vengono mescolati in posizioni fisse e riletti in un ordine fisso. Il processo è completamente deterministico: lo stesso codice dà sempre lo stesso personaggio.

→ Pagina 2: la scelta del personaggio