Cifra di controllo dei codici a barre: come si calcola (EAN-13, UPC-A, GTIN-14, SSCC, Code 39, Code 128)
La cifra di controllo è l'ultima cifra di un codice GS1 (EAN, UPC, GTIN, SSCC) e si calcola così: partendo dalla cifra più a destra dei dati, moltiplica alternativamente per 3 e per 1, somma tutto e sottrai il risultato dal multiplo di 10 successivo. Per 800123456789 la somma è 103 e la cifra è 7: 8001234567897.
In breve: per calcolarla senza errori usa il calcolatore della cifra di controllo (EAN-8, EAN-13, UPC-A, GTIN-14, SSCC). Qui sotto trovi l'algoritmo con esempi svolti, utile per capire perché un codice viene rifiutato o per implementarlo in un software.
L'algoritmo mod 10 GS1
- Prendi le cifre dati, cioè tutto il codice tranne la cifra di controllo.
- Assegna i pesi da destra: la cifra più a destra pesa 3, la precedente 1, poi 3, poi 1, e così via.
- Moltiplica e somma tutti i prodotti.
- Calcola la cifra: (10 meno il resto della somma diviso 10). Se il resto è 0, la cifra di controllo è 0.
Partire da destra è il trucco che rende l'algoritmo identico per tutte le chiavi GS1: EAN-8, UPC-A, EAN-13, GTIN-14 e SSCC usano gli stessi pesi a partire dall'ultima cifra dati. Per l'EAN-13, contando da sinistra, i pesi risultano 1, 3, 1, 3...; per l'UPC-A, contando da sinistra, 3, 1, 3, 1... È lo stesso schema visto da due lati.
Esempio svolto: EAN-13
Dati: 800123456789 (12 cifre). Pesi da sinistra 1, 3, 1, 3... (equivalenti a 3, 1 partendo da destra).
| Posizione | Cifra | Peso | Prodotto |
|---|---|---|---|
| 1 | 8 | 1 | 8 |
| 2 | 0 | 3 | 0 |
| 3 | 0 | 1 | 0 |
| 4 | 1 | 3 | 3 |
| 5 | 2 | 1 | 2 |
| 6 | 3 | 3 | 9 |
| 7 | 4 | 1 | 4 |
| 8 | 5 | 3 | 15 |
| 9 | 6 | 1 | 6 |
| 10 | 7 | 3 | 21 |
| 11 | 8 | 1 | 8 |
| 12 | 9 | 3 | 27 |
Somma: 8 + 0 + 0 + 3 + 2 + 9 + 4 + 15 + 6 + 21 + 8 + 27 = 103. Resto della divisione per 10: 3. Cifra di controllo: 10 − 3 = 7. Codice completo: 8001234567897.
Scorciatoia utile a mano: somma le cifre in posizione pari (0+1+3+5+7+9 = 25) e moltiplica per 3 (75), poi aggiungi le cifre in posizione dispari (8+0+2+4+6+8 = 28). Totale 103, stesso risultato.
EAN-8, UPC-A, GTIN-14 e SSCC
EAN-8
Dati 9638507. Da destra con pesi 3, 1: (7+5+3+9) × 3 = 72, più (0+8+6) = 14. Totale 86, resto 6, cifra 4. Codice: 96385074.
UPC-A
Dati 03600029145 (11 cifre). Le posizioni dispari da sinistra pesano 3: (0+6+0+2+1+5) × 3 = 42; le pari pesano 1: 3+0+0+9+4 = 16. Totale 58, resto 8, cifra 2. Codice: 036000291452. Approfondisci in UPC-A e UPC-E.
GTIN-14 (ITF-14, cartoni)
Dati 1800123456789: indicatore 1 seguito dalle prime 12 cifre dell'EAN-13 del prodotto, senza la sua cifra di controllo. Da destra con pesi 3, 1: (9+7+5+3+1+0+1) × 3 = 78, più (8+6+4+2+0+8) = 28. Totale 106, resto 6, cifra 4. Codice: 18001234567894. Nota che non è la 7 dell'EAN-13: la cifra va sempre ricalcolata. Vedi ITF-14.
SSCC (unità logistiche)
Dati (17 cifre): estensione 3, prefisso aziendale 8001234, seriale 000000001, cioè 38001234000000001. Da destra con pesi 3, 1: le cifre con peso 3 sono 1, 0, 0, 0, 0, 3, 1, 0, 3 (somma 8, per 3 fa 24); quelle con peso 1 sono 0, 0, 0, 0, 4, 2, 0, 8 (somma 14). Totale 38, resto 8, cifra 2. SSCC: 380012340000000012, in GS1-128 con AI (00). Vedi GS1-128 e Application Identifier.
I codici con prefisso 8001234 usati negli esempi sono illustrativi. Per i tuoi prodotti usa il prefisso aziendale assegnato da GS1 Italy.
Code 39 (mod 43) e Code 128 (mod 103)
Code 39: facoltativa
Ogni carattere ha un valore (0-9 = 0-9, A-Z = 10-35, - = 36, . = 37, spazio = 38, $ = 39, / = 40, + = 41, % = 42). Somma i valori e prendi il resto della divisione per 43. Per AB-12: 10 + 11 + 36 + 1 + 2 = 60; 60 mod 43 = 17, cioè H. Il codice diventa AB-12H. Il controllo è facoltativo: il lettore lo verifica solo se glielo chiedi. Dettagli in Code 39.
Code 128: obbligatoria e invisibile
Valore dello start più ogni carattere moltiplicato per la sua posizione, modulo 103. Per ABC in set B: 104 + 33×1 + 34×2 + 35×3 = 310; 310 mod 103 = 1. La calcola il software che genera il codice, il lettore la verifica e non la trasmette mai: non compare nei dati né nel testo stampato. Vedi Code 128.
Come si comporta il lettore
| Simbologia | Presenza | Verifica del lettore | Trasmessa? |
|---|---|---|---|
| EAN-13, EAN-8, UPC-A | Obbligatoria | Sempre | Di solito sì, disattivabile |
| UPC-E | Obbligatoria (implicita nella codifica) | Sempre | Di solito sì, disattivabile |
| ITF-14 | Obbligatoria (parte del GTIN) | Se attivata | Deve esserlo |
| Interleaved 2 of 5 generico | Facoltativa | Se attivata | Configurabile |
| Code 39 | Facoltativa | Se attivata | Configurabile |
| Code 128, GS1-128 | Obbligatoria (mod 103) | Sempre | Mai |
| QR, Data Matrix, PDF417 | Correzione errori interna | Sempre | Mai |
Nel GS1-128 e nel GS1 DataMatrix la cifra mod 10 del GTIN o dell'SSCC fa parte dei dati e viene quindi trasmessa, mentre il controllo del simbolo resta interno.
Errori comuni e cosa succede alla lettura
- Etichetta stampata con cifra di controllo sbagliata (EAN o UPC): il lettore non la legge affatto, spesso senza beep. Molti pensano a un guasto: vedi il lettore legge solo alcuni codici.
- GTIN-14 ottenuto aggiungendo l'indicatore senza ricalcolare:
18001234567897è errato, quello giusto è18001234567894. - Trasmissione della cifra disattivata: il gestionale riceve 12 cifre invece di 13 e non trova l'articolo.
- Verifica Code 39 attivata su codici che non la contengono: tutte le letture vengono scartate.
- Codici a peso variabile (prefisso 2): oltre alla cifra di controllo finale alcuni schemi nazionali prevedono una cifra di controllo interna sul prezzo; dipende dalla struttura scelta dal distributore. Vedi codici a peso variabile.
Domande frequenti
La cifra di controllo protegge da tutti gli errori?
Il mod 10 GS1 rileva qualsiasi errore su una singola cifra e la maggior parte degli scambi tra cifre adiacenti, ma non tutti: per esempio non rileva lo scambio di due cifre adiacenti che differiscono di 5. Per questo la verifica a livello di simbolo resta importante.
Come implemento il calcolo in Excel?
Con una formula che moltiplica ogni cifra per il peso 3 o 1 partendo da destra, somma e applica il modulo 10. Per evitare errori di formato tratta il codice come testo, non come numero: vedi lettura in Excel e Google Fogli.
Posso far trasmettere al lettore la cifra di controllo del Code 128?
No: per lo standard il carattere di controllo del Code 128 non fa parte dei dati e i lettori non lo trasmettono.
Fonti e riferimenti
Altro in Tipi di codici a barre
- Tipi di codici a barre: tabella comparativa completa
- Codici lineari e codici 2D: differenze e lettori adatti
- Data Matrix e GS1 DataMatrix: struttura e lettura
- GS1 DataBar: varianti, uso e impostazioni del lettore
- Interleaved 2 of 5 e ITF-14: struttura e lettura
- PDF417: struttura, capacità e lettori compatibili
- QR Code: struttura, capacità e lettura con lo scanner
- UPC-A e UPC-E: struttura, conversioni e lettura