Code 128 vs Code 39: quale simbologia di codici a barre scegliere?
Scritto da Tomasz Lichosik
Pronto a generare codici a barre?
Crea etichette di alta qualità in pochi secondi.
Quando si configura un sistema di inventario o di logistica interna, ci si trova spesso di fronte alla scelta tra due simbologie classiche: il Code 128 e il Code 39. Entrambe sono lineari, entrambe gestiscono lettere e numeri e a prima vista sembrano intercambiabili. Non lo sono — e la scelta sbagliata emerge più tardi sotto forma di etichette troppo larghe, letture che falliscono o un'integrazione che richiede più manutenzione del previsto.
I codici lineari (1D) restano la base del tracciamento fisico. A differenza dei QR Code o dei DataMatrix, che richiedono uno scanner a immagine, un codice lineare si legge con un semplice laser economico. Se stai etichettando ubicazioni di magazzino, cespiti aziendali o scaffalature, la decisione si riduce quasi sempre a questi due standard industriali.
Questo articolo non si limita a citare i numeri consueti: tutte le larghezze riportate sotto sono state misurate sul generatore che alimenta questo sito, simbolo per simbolo. Due affermazioni che questa pagina ripeteva non hanno superato la misurazione.
1. Code 39: il pioniere degli standard industriali
Introdotto nel 1974 da Intermec, il Code 39 (scritto anche «3 of 9») è stato il primo codice a barre alfanumerico. Il nome ne descrive la struttura: ogni carattere è composto da nove elementi — barre e spazi — di cui esattamente tre sono larghi.
Lo abbiamo verificato sul simbolo più corto possibile, con un solo carattere di dati. Il simbolo completo contiene allora tre caratteri (start *, il dato, stop *): il generatore produce 29 elementi, di cui 9 larghi — cioè esattamente 3 × 9 elementi con 3 × 3 larghi, più gli spazi tra i caratteri. Il rapporto largo/stretto misurato è 3:1, entro l'intervallo ammesso dalla norma (da 2:1 a 3:1).
Set di caratteri e limiti
Nella versione base il Code 39 è autoverificante e copre 43 caratteri:
- Lettere maiuscole dalla
AallaZ - Cifre da
0a9 - Alcuni simboli: spazio,
-,.,$,/,+,% - L'asterisco (
*), riservato ai marcatori di inizio e fine. Gli scanner non lo trasmettono al sistema: serve solo a individuare dove il codice comincia e finisce.
Esiste una variante estesa «Full ASCII» in grado di codificare le minuscole e il resto dei 128 caratteri ASCII, ma lo fa abbinando due caratteri standard per ciascuno (una «a» minuscola diventa +A).
Il costo misurato di questo espediente: sei lettere maiuscole occupano 127 X, le stesse sei lettere in minuscolo tramite Full ASCII ne occupano 223 X, cioè 1,76 volte di più. Il fattore non è esattamente 2 perché l'overhead fisso di start e stop non viene raddoppiato — ma a livello di caratteri il raddoppio è esatto.
2. Code 128: lo standard moderno delle prestazioni
Sviluppato nel 1981 da Computer Identics, il Code 128 nasce proprio per risolvere il problema di ingombro del Code 39, aggiungendo un controllo d'errore più solido e il supporto completo della tastiera.
ASCII completo e sottoinsiemi
Il Code 128 codifica tutti i 128 caratteri ASCII — minuscole, punteggiatura, perfino caratteri di controllo. Ci riesce senza gonfiare il simbolo grazie a tre sottoinsiemi di caratteri (A, B e C) tra cui commuta a metà codice:
- Sottoinsieme A — cifre, maiuscole e caratteri di controllo.
- Sottoinsieme B — cifre, maiuscole, minuscole e punteggiatura standard.
- Sottoinsieme C — coppie numeriche. Invece di una cifra per simbolo, codifica due cifre in un unico motivo.
La formula della larghezza, misurata
È qui che il confronto diventa concreto. Misurando simboli di lunghezza crescente, la larghezza di entrambe le simbologie segue una retta perfetta:
| Simbologia | Larghezza del simbolo (in moduli X) |
|---|---|
| Code 39 | 31 X + 16 X × numero di caratteri |
| Code 128 | 35 X + 11 X × numero di caratteri |
I 16 X del Code 39 si scompongono esattamente: 6 elementi stretti (6 X) + 3 elementi larghi (9 X) + 1 X di spazio tra caratteri. Il Code 128 invece addebita sempre 11 moduli per carattere, qualunque sia il contenuto.
Il suo overhead fisso è più alto — 35 X, cioè tre caratteri interi di cui nessuno trasporta i tuoi dati: carattere di start (11 X), somma di controllo Modulo 103 (11 X) e carattere di stop (13 X). Il Code 39 parte più basso (31 X) ma paga molto di più ogni singolo carattere.
3. «Dal 30 al 50 % più stretto»: cosa dice davvero la misura
Questa frase circola ovunque, e anche questa pagina la ripeteva. Così com'è, è falsa: vale solo per un tipo di dati ben preciso.
Stringa alfanumerica (sottoinsieme B)
| Caratteri | Code 39 | Code 128 | Risparmio |
|---|---|---|---|
| 4 | 95 X | 79 X | 17 % |
| 6 | 127 X | 101 X | 20 % |
| 8 | 159 X | 123 X | 23 % |
| 10 | 191 X | 145 X | 24 % |
| 15 | 271 X | 200 X | 26 % |
| 20 | 351 X | 255 X | 27 % |
Persino a 20 caratteri il divario si ferma al 27 % — sotto la soglia minima dichiarata.
Stringa puramente numerica (sottoinsieme C)
| Cifre | Code 39 | Code 128 | Risparmio |
|---|---|---|---|
| 4 | 95 X | 57 X | 40 % |
| 6 | 127 X | 68 X | 47 % |
| 8 | 159 X | 79 X | 50 % |
| 10 | 191 X | 90 X | 53 % |
| 15 | 271 X | 134 X | 51 % |
| 20 | 351 X | 145 X | 59 % |
È qui che la promessa regge — e viene superata. Il motivo è diretto: nel sottoinsieme C una cifra costa 5,5 X contro i 16 X del Code 39, quasi tre volte meno.
Da ricordare: il divario dipende prima dalla natura dei tuoi dati e solo dopo dalla loro lunghezza. Un identificativo alfanumerico non ti farà risparmiare metà etichetta.
4. Il dettaglio controintuitivo: una cifra in più può restringere il codice
Verificando la tabella precedente è emersa un'anomalia: il risparmio a 15 cifre (51 %) è inferiore a quello a 10 cifre (53 %). Non è un errore di misura.
Il sottoinsieme C codifica le cifre a coppie. Un numero dispari di cifre non entra nelle coppie: il generatore deve cambiare sottoinsieme per l'ultima cifra, e lo paga al prezzo di un carattere intero.
| Cifre | Code 128 | Variazione |
|---|---|---|
| 12 | 101 X | — |
| 13 | 123 X | +22 X |
| 14 | 112 X | −11 X |
| 15 | 134 X | +22 X |
| 16 | 123 X | −11 X |
Leggi la terza riga: un codice da 14 cifre è più stretto di uno da 13 cifre. Aggiungere una cifra — per esempio uno zero iniziale — fa guadagnare 11 X di larghezza.
Non è un caso da manuale. Il formato numerico più diffuso nel commercio, il GTIN a 13 cifre, cade esattamente in questa trappola: il numero di cifre è dispari e paga la penalità.
5. Confronto tecnico diretto
| Caratteristica | Code 39 | Code 128 |
|---|---|---|
| Anno di introduzione | 1974 | 1981 |
| Larghezza per carattere | 16 X | 11 X (5,5 X per cifra nel sottoinsieme C) |
| Overhead fisso | 31 X | 35 X |
| Set di caratteri | Maiuscole, cifre, 7 simboli | ASCII completo, minuscole incluse |
| Compressione numerica | Nessuna | Sì — due cifre per simbolo |
| Autoverifica | Sì | Sì |
| Cifra di controllo | Opzionale (Modulo 43) | Obbligatoria (Modulo 103) |
| Settori tipici | Difesa, automotive, elettronica | Logistica (GS1), magazzino, spedizioni |
| Rischio di letture errate | Basso ma reale | Estremamente basso |
6. Due esempi che chiudono la questione
Prendiamo due identificativi che si incontrano ogni giorno.
Un codice di ubicazione, REG-A1 (6 caratteri alfanumerici):
Code 39 = 127 X · Code 128 = 101 X · risparmio: 20 %. Reale, ma non decisivo. Se il tuo parco scanner è datato, non deve essere questo numero a determinare la scelta.
Un codice articolo, 4006381333931 (13 cifre):
Code 39 = 239 X · Code 128 = 123 X · risparmio: 49 % (non ~55 %, per via del numero dispari di cifre visto sopra).
Tradotto in millimetri su una stampante termica a 203 dpi, con modulo X di 0,250 mm (2 punti):
- In Code 39: 59,8 mm
- In Code 128: 30,8 mm
- Differenza: 29,0 mm
Quasi tre centimetri su una singola etichetta. È la differenza tra stare su un supporto da 40 mm e doverne ordinare uno più largo.
7. Quando scegliere l'uno o l'altro
Il Code 39 ha ancora senso quando:
- L'hardware è datato. Vecchi sistemi di inventario, penne ottiche o macchinari senza firmware di decodifica moderno leggono il Code 39 senza difficoltà, proprio perché è semplicissimo da decodificare.
- I codici sono corti e alfabetici. Un codice scaffale
REG-A1o di stanzaST-102resta di lunghezza ragionevole e non devi preoccuparti della cifra di controllo. - Il software è essenziale. Se stampi da un font per codici a barre racchiudendo semplicemente la stringa tra asterischi (
*REG101*), il Code 39 si integra senza librerie di calcolo.
Il Code 128 è la scelta predefinita migliore quando:
- Lo spazio è poco. Componenti minuti, flaconi, cespiti, etichette per documenti: il layout compatto fa risparmiare materiale.
- I dati sono lunghi o numerici. È l'unico caso in cui il divario supera davvero il 50 %. E tieni conto della parità del numero di cifre.
- Servono minuscole o punteggiatura. In Code 39 la stessa stringa diventa 1,76 volte più larga; in Code 128 è 55 % più stretta del suo equivalente Full ASCII.
- Una lettura errata costa cara. Nella logistica farmaceutica, nei beni di valore o nello smistamento corrieri, la somma Modulo 103 obbligatoria è un'assicurazione a basso costo.
Conclusione
Il Code 39 resta un pioniere robusto e semplice, ancora giustificato in ambienti legacy, militari e industriali chiusi. Per la logistica generale, le spedizioni e la maggior parte degli inventari aziendali, il Code 128 è lo standard di riferimento: più denso, ASCII completo e con somma di controllo obbligatoria.
Ma la sfumatura più utile è quella emersa dalla misura: il suo vantaggio di densità vale il 20 % su un codice di ubicazione e il 49 % su un codice articolo. Scegli in base ai tuoi dati reali, non a un numero generico.
Qualunque simbologia tu scelga, alla fine conta una stampa nitida che venga letta al primo colpo. Puoi generare codici Code 128 o Code 39 conformi, in SVG o PDF ad alta risoluzione, con il nostro generatore Code 128.