[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [licenze] [indice analitico] [tomo] [parte]


Capitolo 301.   Codici a barre

I codici a barre sono dati memorizzati in forma ottica, attraverso l'uso di barre verticali che possono essere lette e interpretate facilmente attraverso strumenti non troppo complessi. La tecnica dei codici a barre nasce negli anni 1960 e si diffonde negli anni 1970, con lo scopo di identificare rapidamente imballaggi e merci.

Gli standard sui codici a barre sono molti e il problema più importante da risolvere quando si vogliono usare è il decidere quale sia quello più conveniente per i propri fini. Si parla di simbologia per fare riferimento al tipo di codice a barre, ovvero allo standard di rappresentazione dei dati; la simbologia definisce implicitamente il tipo di dati che possono essere memorizzati. Per fare un esempio abbastanza comune, i codici ISBN dei libri sono scritti usando codici a barre di tipo EAN-13, che si compongono di 13 cifre numeriche; in questo caso, la simbologia è EAN-13, con la quale si vanno a rappresentare in pratica i codici ISBN.

Le rappresentazioni normali di un codice a barre sono a una sola dimensione, ovvero, è prevista una lettura orizzontale unica. Nella lettura vengono attraversate barre verticali nere e spazi bianchi; queste barre di larghezze differenti e gli spazi di ampiezze diverse sono gli elementi della simbologia; ogni simbologia usa un proprio numero di elementi differenti. Nel capitolo vengono descritte brevemente alcune simbologie standard.

301.1   UPC-E, UPC-A, EAN-8 e EAN-13

UPC-E, UPC-A, EAN-8 e EAN-13 sono tipi di simbologia in cui si possono rappresentare solo cifre numeriche: UPC-A consente di rappresentare 11 cifre più una di controllo; UPC-E consente di rappresentare sei cifre, senza codice di controllo; EAN-8 consente di rappresentare sette cifre più una di controllo; EAN-13 consente di rappresentare 12 cifre numeriche più una di controllo. Eventualmente, la codifica UPC-A e la codifica EAN-13 consentono l'aggiunta di due o cinque cifre in un'estensione separata.

La figura 301.1 mostra rispettivamente l'esempio di: 123 456 con UPC-E, 12 345 678 901 con UPC-A, 12 345 678 901 più 12 con UPC-A, 12 345 678 901 più 12 345 con UPC-A. Si può osservare che nel caso di UPC-A viene aggiunto automaticamente il codice di controllo due, indipendentemente dalla presenza o meno dell'estensione.

UPC-E 123456 UPC-A 12345678901

UPC-A 12345678901 12 UPC-A 12345678901 12345

Figura 301.1. Esempi di codici a barre: UPC-E, UPC-A, UPC-A con estensione di due cifre, UPC-A con un'estensione di cinque cifre.

La figura 301.2 mostra rispettivamente l'esempio di: 1 234 567 con EAN-8, 123 456 789 012 con EAN-13, 123 456 789 012 più 12 con EAN-13, 123 456 789 012 più 12 345 con EAN-13. Si può osservare che nel caso di EAN-13 viene aggiunto automaticamente il codice di controllo otto, indipendentemente dalla presenza o meno dell'estensione.

EAN-8 1234567 EAN-13 123456789012

EAN-13 123456789012 12 EAN-13 123456789012 12345

Figura 301.2. Esempi di codici a barre: EAN-8, EAN-13, EAN-13 con estensione di due cifre, EAN-13 con un'estensione di cinque cifre.

Gli elementi utilizzati nella simbologia EAN/UPC sono otto, composti da quattro tipi di barre nere e quattro tipo di spazi.

301.1.1   ISBN e ISSN

La simbologia EAN-13 viene usata in diverse situazioni comuni, in particolare per ciò che riguarda le pubblicazioni.

301.2   Code 39

La simbologia denominata Code 39, ovvero 3 of 9, consente di rappresentare 42 simboli, composti da lettere maiuscole, cifre numeriche e pochi altri segni. La tabella 301.1 riepiloga l'insieme di caratteri. Un codice a barre Code 39 è composto da un carattere di inizio, dai dati che deve contenere, da un codice di controllo (che non appare tradotto per la lettura umana) e dal carattere di fine. Il carattere usato per iniziare e per concludere la sequenza è l'asterisco, che quindi non può essere utilizzato nei dati contenuti.

Valore Carattere       Valore Carattere
0 0 22 M
1 1 23 N
2 2 24 O
3 3 25 P
4 4 26 Q
5 5 27 R
6 6 28 S
7 7 29 T
8 8 30 U
9 9 31 V
10 A 32 W
11 B 33 X
12 C 34 Y
13 D 35 Z
14 E 36 -
15 F 37 .
16 G 38 space
17 H 39 $
18 I 40 /
19 J 41 +
20 K 42 %
21 L inizio/fine *

Tabella 301.1. Insieme di caratteri per la simbologia Code 39.

figure/a2-codice-a-barre-esempio-code-39

Figura 301.5. Esempio di codice a barre Code 39.

Gli elementi utilizzati nella simbologia Code 39 sono quattro, composti da due tipi di barre nere e due tipi di spazi. Ogni carattere o segno che può essere rappresentato con questa simbologia, si avvale di cinque barre e di quattro spazi, per un totale di nove elementi. Il nome della simbologia, che si può tradurre come «tre su nove», indica il fatto che tre elementi su nove sono sempre di tipo largo (rispetto agli altri che invece sono stretti).

Il codice di controllo si ottiene sommando assieme i valori abbinati ai segni che si possono rappresentare, secondo la tabella di conversione 301.1, dividendo per 43. Il resto della divisione è il codice di controllo. Nel caso dell'esempio che appare in figura 301.5, si tratta della lettera L:

«CIAO» = 12 + 18 + 10 + 24 = 64

64 / 43 = 1 lasciando un resto di 21 = L

301.2.1   Code 39 esteso

Esiste anche un'estensione della simbologia Code 39, allo scopo di consentire la rappresentazione dell'ASCII standard completo. Si ottiene questo risultato scrivendo due simboli normali al posto di uno. Naturalmente, dal momento che non esiste un modo per distinguere la codifica standard da quella estesa, è necessario che il lettore di codice a barre sia impostato nel modo più conveniente. La tabella 301.2 mostra l'insieme di caratteri esteso e la corrispondenza con i segni della simbologia Code 39 normale.

ASCII Code 39     ASCII Code 39     ASCII Code 39     ASCII Code 39
<NUL> %U <SP> = @ %V ` %W
<SOH> $A ! /A A A a +A
<STX> $B " /B B B b +B
<ETX> $C # /C C C c +C
<EOT> $D $ /D D D d +D
<ENQ> $E % /E E E e +E
<ACK> $F & /F F F f +F
<BEL> $G ' /G G G g +G
<BS> $H ( /H H H h +H
<HT> $I ) /I I I i +I
<LF> $J * /J J J j +J
<VT> $K + /K K K k +K
<FF> $L , /L L L l +L
<CR> $M - /M M M m +M
<SO> $N . /N N N n +N
<SI> $O / /O O O o +O
<DLE> $P 0 0 P P p +P
<DC1> $Q 1 1 Q Q q +Q
<DC2> $R 2 2 R R r +R
<DC3> $S 3 3 S S s +S
<DC4> $T 4 4 T T t +T
<NAK> $U 5 5 U U u +U
<SYN> $V 6 6 V V v +V
<ETB> $W 7 7 W W w +W
<CAN> $X 8 8 X X x +X
<EM> $Y 9 9 Y Y y +Y
<SUB> $Z : /Z Z Z z +Z
<ESC> %A ; %F [ %K { %P
<FS> %B < %G \ %L | %Q
<GS> %C = %H ] %M } %R
<RS> %D > %I ^ %N ~ %S
<US> %E ? %J _ %O <DEL> %T

Tabella 301.2. Insieme di caratteri esteso per la simbologia Code 39.

301.3   Code 128

La simbologia denominata Code 128, ovvero USS Code 128, consente di rappresentare 106 simboli, che possono essere interpretati secondo tre insiemi di caratteri, distinti in base a una lettera: A, B e C. Per questa ragione, un codice a barre realizzato secondo la simbologia Code 128 inizia sempre con la dichiarazione dell'insieme di caratteri. L'informazione non ha una lunghezza predeterminata e può essere modificato l'insieme di caratteri quando serve. La simbologia Code 128 prevede l'inserimento di un codice di controllo, calcolato automaticamente per consentire la verifica della lettura meccanica, ma questa cifra non viene mostrata per la lettura umana.

Valore Code A Code B Code C Barre e spazi:
b s b s b s
0 <SP> <SP> 00 2 1 2 2 2 2
1 ! ! 01 2 2 2 1 2 2
2 " " 02 2 2 2 2 2 1
3 # # 03 1 2 1 2 2 3
4 $ $ 04 1 2 1 3 2 2
5 % % 05 1 3 1 2 2 2
6 & & 06 1 2 2 2 1 3
7 ' ' 07 1 2 2 3 1 2
8 ( ( 08 1 3 2 2 1 2
9 ) ) 09 2 2 1 2 1 3
10 * * 10 2 2 1 3 1 2
11 + + 11 2 3 1 2 1 2
12 ' ' 12 1 1 2 2 3 2
13 - - 13 1 2 2 1 3 2
14 . . 14 1 2 2 2 3 1
15 / / 15 1 1 3 2 2 2
16 0 0 16 1 2 3 1 2 2
17 1 1 17 1 2 3 2 2 1
18 2 2 18 2 2 3 2 1 1
19 3 3 19 2 2 1 1 3 2
20 4 4 20 2 2 1 2 3 1
21 5 5 21 2 1 3 2 1 2
22 6 6 22 2 2 3 1 1 2
23 7 7 23 3 1 2 1 3 1
24 8 8 24 3 1 1 2 2 2
25 9 9 25 3 2 1 1 2 2
26 : : 26 3 2 1 2 2 1
27 ; ; 27 3 1 2 2 1 2
28 < < 28 3 2 2 1 1 2
29 = = 29 3 2 2 2 1 1
30 > > 30 2 1 2 1 2 3
31 ? ? 31 2 1 2 3 2 1
32 @ @ 32 2 3 2 1 2 1
33 A A 33 1 1 1 3 2 3
34 B B 34 1 3 1 1 2 3
35 C C 35 1 3 1 3 2 1
36 D D 36 1 1 2 3 1 3
37 E E 37 1 3 2 1 1 3
38 F F 38 1 3 2 3 1 1
39 G G 39 2 1 1 3 1 3
40 H H 40 2 3 1 1 1 3
41 I I 41 2 3 1 3 1 1
42 J J 42 1 1 2 1 3 3
43 K K 43 1 1 2 3 3 1
44 L L 44 1 3 2 1 3 1
45 M M 45 1 1 3 1 2 3
46 N N 46 1 1 3 3 2 1
47 O O 47 1 3 3 1 2 1
48 P P 48 3 1 3 1 2 1
49 Q Q 49 2 1 1 3 3 1
50 R R 50 2 3 1 1 3 1
51 S S 51 2 1 3 1 1 3
52 T T 52 2 1 3 3 1 1

Tabella 301.3. Insiemi di caratteri per la simbologia Code 128. Prima parte. L'ultima colonna riporta anche la descrizione della rappresentazione a barre, dove un numero da uno a tre indica la larghezza della barra, b, o dello spazio, s, dalla grandezza più piccola alla più grande.

Valore Code A Code B Code C Barre e spazi:
b s b s b s
53 U U 53 2 1 3 1 3 1
54 V V 54 3 1 1 1 2 3
55 W W 55 3 1 1 3 2 1
56 X X 56 3 3 1 1 2 1
57 Y Y 57 3 1 2 1 1 3
58 Z Z 58 3 1 2 3 1 1
59 [ [ 59 3 3 2 1 1 1
60 \ \ 60 3 1 4 1 1 1
61 ] ] 61 2 2 1 4 1 1
62 ^ ^ 62 4 3 1 1 1 1
63 _ _ 63 1 1 1 2 2 4
64 <NUL> ` 64 1 1 1 4 2 2
65 <SOH> a 65 1 2 1 1 2 4
66 <STX> b 66 1 2 1 4 2 1
67 <ETX> c 67 1 4 1 1 2 2
68 <EOT> d 68 1 4 1 2 2 1
69 <ENQ> e 69 1 1 2 2 1 4
70 <ACK> f 70 1 1 2 4 1 2
71 <BEL> g 71 1 2 2 1 1 4
72 <BS> h 72 1 2 2 4 1 1
73 <HT> i 73 1 4 2 1 1 2
74 <LF> j 74 1 4 2 2 1 1
75 <VT> k 75 2 4 1 2 1 1
76 <FF> l 76 2 2 1 1 1 4
77 <CR> m 77 4 1 3 1 1 1
78 <SO> n 78 2 4 1 1 1 2
79 <SI> o 79 1 3 4 1 1 1
80 <DLE> p 80 1 1 1 2 4 2
81 <DC1> q 81 1 2 1 1 4 2
82 <DC2> r 82 1 2 1 2 4 1
83 <DC3> s 83 1 1 4 2 1 2
84 <DC4> t 84 1 2 4 1 1 2
85 <NAK> u 85 1 2 4 2 1 1
86 <SYN> v 86 4 1 1 2 1 2
87 <ETB> w 87 4 2 1 1 1 2
88 <CAN> x 88 4 2 1 2 1 1
89 <EM> y 89 2 1 2 1 4 1
90 <SUB> z 90 2 1 4 1 2 1
91 <ESC> { 91 4 1 2 1 2 1
92 <FS> | 92 1 1 1 1 4 3
93 <GS> } 93 1 1 1 3 4 1
94 <RS> ~ 94 1 3 1 1 4 1
95 <US> <DEL> 95 1 1 4 1 1 3
96 FNC 3 FNC 3 96 1 1 4 3 1 1
97 FNC 2 FNC 2 97 4 1 1 1 1 3
98 Shift Shift 98 4 1 1 3 1 1
99 Code C Code C 99 1 1 3 1 4 1
100 Code B FNC 4 Code B 1 1 4 1 3 1
101 FNC 4 Code A Code A 3 1 1 1 4 1
102 FNC 1 FNC 1 FNC 1 4 1 1 1 3 1
103 Start A Start A Start A 2 1 1 4 1 2
104 Start B Start B Start B 2 1 1 2 1 4
105 Start C Start C Start C 2 1 1 2 3 2
Stop Stop Stop 2 3 3 1 1 1 2

Tabella 301.4. Insiemi di caratteri per la simbologia Code 128. Seconda parte. Si osservi che lo stop ha una barra in più alla fine.

Gli insiemi di caratteri A, B e C sono elencati nelle tabelle 301.3 e 301.4. Come si può vedere, l'insieme A consente di rappresentare l'alfabeto maiuscolo, le cifre numeriche, vari simboli di punteggiatura e caratteri di controllo; in pratica, ciò che si può rappresentare con la prima parte della codifica ASCII, tenendo conto che le posizioni non corrispondono. L'insieme B consente di rappresentare praticamente tutto l'alfabeto ASCII, compresa la distinzione tra lettere maiuscole e minuscole, a esclusione dei caratteri di controllo. L'insieme C consente di rappresentare valori numerici a coppie, per cui, un valore composto da un numero dispari di cifre acquisisce uno zero iniziale.

Code 128-B Ciao Code 128-C 37736578

Figura 301.6. Esempio di due codici Code 128, realizzati usando l'insieme B e l'insieme C, per rappresentare due dati equivalenti: «Ciao» e 37 736 578.

La figura 301.6 mostra la comparazione tra un codice a barre realizzato usando l'insieme B e un altro con l'insieme C. L'informazione contenuta è la stessa dal punto di vista dei valori rappresentabili (eventualmente si osservino le tabelle degli insiemi di caratteri). Se fosse possibile sovrapporre i due codici, si noterebbe che cambia solo la parte iniziale, quella in cui si dichiara l'insieme di caratteri, e la parte finale, dove si inserisce il codice di controllo. Si può anche osservare che gli ultimi elementi rimangono uguali e sono quelli che contengono il codice di conclusione.

Volendo entrare nel dettaglio, l'esempio di figura 301.6 si compone di: Start B, 35, 73, 65, 79, codice_di_controllo, Stop; ovvero, nel secondo caso, Start C, 35, 73, 65, 79, codice_di_controllo, Stop.

Quando si vuole cambiare l'insieme di caratteri, si inserisce un simbolo Code A, Code B o Code C, per introdurre l'insieme a cui si vuole fare riferimento dal quel punto in poi.

Il codice di controllo finale si calcola sommando il valore corrispondente alla dichiarazione iniziale dell'insieme di caratteri alla somma dei valori successivi, moltiplicati per la loro posizione. La somma complessiva va divisa per 103 e il resto che si ottiene è il codice di controllo finale. Si osservi l'esempio:

Start B C i a o Stop
Peso 1 1 2 3 4
Valore 104 35 73 65 79
Peso*Valore 104 35 146 195 316

Pertanto:

104 + 35 + 146 + 195 + 316 = 796

796 / 103 = 7 con resto di 75. Il codice di controllo è il simbolo corrispondente al valore 75.

Usando l'insieme di caratteri C la cosa cambia, perché il simbolo iniziale ha il valore 105, per cui il codice di controllo finale è 76:

Start C 35 73 65 79 Stop
Peso 1 1 2 3 4
Valore 105 35 73 65 79
Peso*Valore 105 35 146 195 316

Dalla simbologia Code 128 derivano diverse applicazioni speciali che si distinguono per avere una struttura particolare. Esiste anche una variante che consente la rappresentazione di più caratteri rispetto all'ASCII standard.

301.3.1   UCC/EAN 128

La simbologia UCC/EAN 128 è un'applicazione di Code 128, in cui si inizia dichiarando l'insieme di caratteri e si inserisce subito dopo il simbolo FNC 1 (Function Code One).(1)

Dopo il simbolo FNC 1 viene indicato un codice che indica il tipo di applicazione. Si fa riferimento a questo con la sigla AI (Application Identifier). L'informazione in questione viene rappresentata per la lettura umana tra parentesi tonde, proprio per facilitare l'interpretazione, a sottolineare il fatto che si tratta di un prefisso. Naturalmente, l'informazione può essere anche più complessa e altre parti dei dati successivi possono essere separate ed evidenziate nello stesso modo o in modi differenti.

301.4   ITF, ovvero i25

La simbologia ITF, o i25, nota come Interleaved two of five, ovvero «interfogliata due su cinque», consente la rappresentazione di soli valori numerici, di lunghezza indefinita, purché in numero di cifre pari. La simbologia prevede una cifra di controllo finale, opzionale.

La simbologia si compone di due tipi di barre e due tipi di spazi. Ogni simbolo si rappresenta con cinque barre e cinque spazi, dove due barre su cinque e due spazi su cinque sono più larghi. La simbologia è detta «interfogliata», perché una cifra è codificata nelle barre e la successiva lo è negli spazi che separano gli elementi del carattere precedente. Prima dei dati è previsto un simbolo iniziale, composto da una barra sottile, uno spazio breve, una barra sottile e un altro spazio breve; alla fine c'è un simbolo finale, composto da una barra larga, uno spazio sottile e una barra sottile.

figure/a2-codice-a-barre-esempio-interleaved-2-of-5

Figura 301.7. Esempio di codice a barre con simbologia interfogliata due su cinque.

301.5   Sistemi bidimensionali

Il codice a barre comune è a una sola dimensione, nel senso che contiene una sola riga di informazioni, eventualmente anche molto breve. Semplificando le cose, si può dire che quando si sovrappongono più righe in un codice a barre, questo diventa a due dimensioni.

Un sistema di codice a barre a due dimensioni, con lo scopo di memorizzare dati, deve essere organizzato in modo da permettere al lettore meccanico di riconoscere e seguire le righe; inoltre deve essere previsto un sistema di informazioni ridondanti, anche molto complesso, in modo da garantire la lettura in presenza di errori.

Lo standard più comune per i codici a barre a due dimensioni è il PDF417, che comunque qui non viene descritto.

301.6   Riferimenti

Appunti di informatica libera 2001.08.18 --- Copyright © 2000-2001 Daniele Giacomini --  daniele @ swlibero.org

1) L'uso comune è dell'insieme di caratteri C, ma ciò non è imposto dallo standard.


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome codici_a_barre.html

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [licenze] [indice analitico]