DisclaimerQuanto riportato in questo documento non è altro che la trasposizione degli appunti del sottoscritto, acquisiti dal 1990 al 1997, durante sezioni di istruzione/lavoro in un CAT del settore identificazione automatica.
Grazie. |
Prefazione
I codici a barre (o barcode) sono stati sviluppati per la lettura, da parte di un sistema automatizzato (o semiautomatizzato), di un numero limitato di caratteri numerici (o alfanumerici), in maniera più semplice che l’interpretazione diretta del carattere stampato tramite sistemi O.C.R. (optical character recognition: riconoscimento ottico del carattere).
La limitazione del numero di caratteri codificabili all’interno del codice a barre, oltre a dipendere, principalmente, dal tipo (alcuni, come vedremo, sono a lunghezza fissa) e alla risoluzione di stampa, sono anche legati al sistema di scansione utilizzato.
A titolo esemplificativo (approfondirò la questione in capitoli successivi) riporto il grafico del range e l’apertura di lettura di uno scanner di codici a barre, di tipo brandeggiabile (nella fattispecie il modello LS1203 della Symbol Technologies) in funzione della densità di stampa:
come si può notare, un codice “denso”, con una dimensione minima di barra/spazio pari a 5 mil (0,127 mm) può essere letto, al massimo, alla distanza di 4.0’’ (101,6 mm) e, a quella distanza, lo scanner “vede” il codice a barre se quest’ultimo non supera la lunghezza di altrettanti 4,0’’: quindi, a quella risoluzione, il mio codice a barre potrà contenere un numero di caratteri tale che, lo stesso codice a barre, non sia più lungo di 4.0’’.
Per cui, in definitiva, il numero di caratteri codificabili all’interno del codice a barre potrebbe non dipendere dallo standard che, di fatto, ne potrebbe permettere un numero elevato, ma dalla capacità del sistema di scansione a disposizione.
La funzione iniziale, e principale, dei codici a barre fu l’automazione della gestione dei magazzini, poi la loro versatilità gli ha permesso di invadere praticamente tutti i settori dove l’identificazione automatizzata poteva risultare vantaggiosa, così finirono per essere utilizzati, ad esempio, in ambito industriale nella gestione dei processi produttivi, nel settore della sicurezza nella gestione del controllo accessi, in ambito sanitario nella tracciatura degli esami clinici.
Nonostante la diffusione, sul finire degli anni ‘90, dei sistemi RFID (radio-frequency identification: identificazione a radio-frequenza, sviluppato, all’origine, sia dagli alleati che dalla Germania, durante la II guerra mondiale, come sistema per il riconoscimento dei velivoli amici o nemici), i codici a barre continuano ad avere, a livello mondiale, una grandissima diffusione, per la loro versatilità di impiego e per i bassi costi di realizzazione che, specialmente in ambito retail/GDO/GDS, viene facilmente ammortizzata nel numero di confezioni prodotte con il medesimo codice identificativo: ad esempio, annualmente si vendono all’incirca 770.000.000 di barattoli di Nutella nel mondo, un prodotto che, in origine, ha già un’etichetta, per cui il costo per l’aggiunta, in fase di implementazione della stessa, di un area per il codice a barre è sicuramente fortemente ammortizzato dall’elevato numero di etichette prodotte.
Classificazione dei codici a barre.
Esistono molti tipi diversi di codici a barre, basta dare un’occhiata alla pagina dedicata su wikipedia[1]: molti di questi sono nati, di volta in volta, per esigenze specifiche in determinati settori, e lì sono rimasti confinati, un esempio classico sono i cosiddetti codici a barre postali, con diverse specifiche a seconda del paese di utilizzo, usati esclusivamente in ambito meccanografico postale e di cui, difficilmente, si trova la necessità di stampare e di decodificare al di fuori di questo ambito.
Software specifici per la stampa di codici a barre, come il programma open source Zint[2], che userò per le principali immagini di esempio in questo contesto, può riprodurre un certo numero di quelli esposti nella summenzionata pagina di wikipedia, in genere quelli di maggior diffusione.
Esistono, poi, stampanti specificatamente costruite per la produzione di etichette con codici a barre (c.d. tag barcode), dotate di una sorta di linguaggio di programmazione che, tramite semplici file di tipo testo, permette di produrre direttamente, senza ricorrere alla stampa per file di immagine (i classici .jpg, .png, .bmp… ), un numero più limitato di codici a barre: per fare un esempio, le stampanti industriali per etichette della Zebra Technologies implementano il linguaggio ZPLII[3], che permette di stampare, tra l’altro, 29 tipi differenti di codici a barre, un numero più che sufficiente in ambito retail e/o industriale.
Ma come vengono classificati i codici a barre?
Escludendo, per il momento, la differenziazione di tipo “strutturale”, che vedremo, nello specifico, più avanti, principalmente, i codici a barre, si suddividono, in base a quello che possono codificare, per cui abbiamo, due grosse macro categorie:
- codici a barre numerici, che possono codificare solo le cifre da 0 a 9, che, a loro volta, si suddividono in:
- codici a lunghezza fissa, ossia con un predeterminato numero di caratteri codificabili
- codici a lunghezza variabile
- codici a barre alfanumerici, che possono codificare, oltre alle cifre, anche le lettere e i segni grafici tipici di un testo stampato.
All’inizio tutti i codici a barre erano esclusivamente di tipo numerico poi, negli anni, si svilupparono altri sistemi di codifica che permisero di aumentare il numero di caratteri codificabili all’interno dei codici a barre, così si arrivò a poter includere oltre ai numeri, anche le lettere alfabetiche (all’inizio solo le maiuscole) e i segni tipografici (a partire da un numero limitato di questi) fino a poter codificare l’intero set di 128 caratteri dell’ASCII 7 bit.
Ma, mentre tutti i codici a barre numerici codificano, ovviamente, le sole cifre da 0 a 9, non tutti i codici a barre alfanumerici (ad esclusione di quelli che codificano l’intero set di caratteri ASCII 7 bit) codificano il medesimo numero di lettere e segni tipografici: prendiamo, ad esempio, due tipi di questi, il CODE39 e il CODE93.
Nota:
- Al momento citerò delle tipologie di codice a barre dando il minimo di informazioni necessarie per lo sviluppo del discorso, più avanti presenterò più approfonditamente la struttura di alcuni di questi.
Entrambi codificano le cifre da 0 a 9 e le lettere maiuscole da A a Z dell’alfabeto ICAO-NATO, ma il primo può includere i segni tipografici - . $ + % e spazio, mentre il secondo riesce a codificare - . $ / + % & ‘ ( ) e spazio.
Ad oggi, se escludiamo il settore ratail/GDO[DO]/GDS[DS] e sanitario che, per esigenze di unicità di corrispondenza tra codice a barre e prodotto a livello mondiale, si è obbligati a seguire specifici standard, che obbligano all’utilizzo di predeterminate categorie di codici a barre nonché l’inserimento del codice prodotto in appositi registri nazionali, in tutti gli altri ambiti la scelta di utilizzare un codice a barre, solo numerico o alfanumerico, è lasciata alla valutazione delle esigenze aziendali.
Torneremo nello specifico sulla questione, per ora diciamo che la scelta del tipo di codice a barre da utilizzare deve essere un compromesso tra:
- le dimensioni fisiche dell’etichetta che andremo ad utilizzare (o lo spazio a disposizione sul prodotto), che determinano, se la produzione è in proprio, anche il tipo di stampante da utilizzare, come risoluzione e larghezza di stampa
- la distanza a cui vorremmo leggere il codice a barre (si pensi ad oggetti immagazzinati su scaffali): maggiore è la distanza, più grande dovrà essere il codice a barre (intesa come maggior grandezza della più piccola barra/spazio)
- e, ovviamente, da quello che vorremmo effettivamente codificare per classificare i nostri prodotti.
Fino agli inizi del 1990, tutti i codici a barre immagazzinavano l’informazione esclusivamente su una dimensione mediante l’alternanza barre/spazi del codice stesso, dall’inizio della prima barra a sinistra alla fine dell’ultima barra a destra e/o viceversa: da qui il nome codice a barre uni dimensionale (1D).
In pratica l’altezza del codice, in questi casi, non porta nessuna informazione perché in qualsiasi punto ci poniamo per valutare l’alternanza barre/spazi di cui sopra, otterremo sempre la medesima decodifica dell’informazione.
Guardiamo, ad esempio, la seguente immagine di un codice a barre CODE39 che codifica semplicemente la lettera A:
Se noi eseguissimo una decodifica lungo una qualsiasi delle tre linee indicate con i numeri da 1 a 3, otterremo sempre la lettera A, questo perché la sequenza di barre/spazi considerata in ciascuna di queste linee è sempre la stessa, ad esempio, da sinistra verso destra, dato “B” per barra, “S” per spazio, “l” per larga/o, “s” per stretta/o, abbiamo: Bs, Sl, Bs, Ss, Bl, Ss, Bl, Ss, Bs, Ss, Bl, Ss, Bs, Ss, Bs, Sl, Bs, Ss, Bl, Ss, Bs, Sl, Bs, Ss, Bl, Ss, Bl, Ss, Bs.
L’altezza, nei codici a barre uni dimensionali, è, generalmente, standardizzata (di norma viene data l’altezza minima in funzione della dimensione più piccola della barra/spazio o come percentuale rispetto alla lunghezza totale del codice) ed è strettamente necessaria per permettere di avere agevolmente una decodifica certa: i due codici a barre qui di seguito, entrambi CODE39, hanno il medesimo messaggio codificato ma risulta evidente che il primo è sicuramente più agevolmente decodificabile, soprattutto con un lettore di tipo brandeggiabile che risente, ovviamente, di un seppur minimo tremolio della mano (la fotocamera del mio smartphone, anche se non è un lettore specifico per codici a barre, riesce a decodificare tranquillamente il primo, ma il secondo non c’è verso di farglielo “vedere”).
Nota:
- Non so se l'impaginazione Wiki rispetti le proporzioni delle immagini ma, secondo quanto impostato per la generazione di due codici a barre, l’altezza del secondo è il 5% del primo: 10 dot contro 200 dot.
Poi, nel 1991, la Symbol Technologies inventò il primo codice a barre (e il relativo sistema di lettura) che riusciva a sfruttare buona parte della superficie occupata dal codice stesso per codificare le informazioni, sfruttando un algoritmo che distribuiva i dati in righe e colonne: il PDF417.
Questo tipo di codice a barre fu, per l’epoca, rivoluzionario, perché permetteva di decodificare diverse migliaia di caratteri (numerici o alfanumerici) e, per la prima volta, anche un file di tipo binario di, circa, 1100 byte.
Inoltre poteva implementare un sistema ECC (error correction code: codice di correzione di errori), che gli assicurava, al massimo, il recupero dei dati codificati anche con il 50% della superficie del codice a barre illeggibile.
Dal momento che la codifica avviene per righe e colonne, questo tipo di codice a barre presenta, ovviamente, per ogni riga, sequenze di barre e spazi differenti le une dalle altre.
In pratica l’informazione, nella sua interezza, deve essere decodificata valutando l’alternanza barre/spazi di tutte le righe, quindi da sinistra a destra (o viceversa) per ogni singola riga ripetuta dall’alto verso il basso (o viceversa) per tutte le righe: nacque così il primo codice a barre bidimensionale (2D).
Qui sotto è riportato un esempio di PDF417 in cui i dati sono codificati in 8 righe per 5 colonne
In realtà, come vedremo quando approfondiremo meglio la struttura dei codici a barre più utilizzati (in particolare quelli per i quali sono liberamente disponibili le informazioni tecniche) nel PDF417, la prima e l’ultima colonna, nel nostro esempio la n° 1 e la n° 5, non codificano i nostri dati ma solamente informazioni sulla struttura del codice stesso: da notare che il PDF417 ammette, strutturalmente, da 1 a 30 colonne e da 3 a 90 righe, di solito con un rapporto di 1:2 (es. 6 colonne per 12 righe), comunque, a seconda del numero di informazioni da codificare e dall’ECC impostato, i programmi predisposti alla generazione dei codici a barre impostano, automaticamente, il numero minimo di righe/colonne che possono contenere i dati.
Quindi, in definitiva, i codici a barre si possono suddividere in due grosse famiglie:
- Codici a barre unidimensionali, che possono codificare
- solo caratteri numerici (a lunghezza fissa o variabile)
- caratteri alfanumerici
- Codici a barre bidimensionale, che possono codificare
- solo caratteri numerici
- caratteri alfanumerici
- file binari
Nota:
- A differenza della suddivisione, per i codici a barre unidimensionali, tra quelli che possono codificare solo caratteri numerici e quelli che possono codificare caratteri alfanumerici, che dipende dalla struttura del codice stesso, per i codici a barre bidimensionali, che tipologia di dati codificare non dipende dalla struttura del codice a barre ma da una libera scelta di chi utilizza quel determinato codice.
I codici a barre maggiormente utilizzati in ambito industriale, retail e sanitario sono i seguenti:
- codici a barre unidimensionali
- solo numerici
- CODE11
- UPC A
- UPC E
- EAN 8
- EAN 13
- PLESSEY
- POSTNET
- CODE25 STANDARD
- CODE25 INDUSTRIAL
- CODE25 INTERLEAVED
- MSI
- CODABAR
- alfanumerici
- CODE39
- CODE93
- CODE128
- LOGMARS
- solo numerici
- codici a barre bidimensionali
- CODE49
- UPS MAXICODE
- PDF417
- QRCODE
- CODABLOCK
- DATAMATRIX
Nelle prossime puntate analizzeremo la struttura di alcuni di questi, in modo più o meno approfondito, come già detto, compatibilmente alla libera disponibilità delle caratteristiche tecniche di ciascuno.
Link
[1] https://en.wikipedia.org/wiki/Barcode#Types_of_barcodes
[3] https://www.zebra.com/content/dam/support-dam/en/documentation/unrestricted/guide/software/zplii-pm-vol1.pdf, https://www.zebra.com/content/dam/support-dam/en/documentation/unrestricted/guide/software/zplii-pm-vol2-en.pdf

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)