Menu

Cifre di controllo EAN UPC per i codici a barre

Le cifre di controllo EAN UPC sono l'ultima cifra di un codice a barre: una somma ponderata che parte da un lato diverso a seconda della lunghezza del codice, poi un complemento al modulo.

Pubblicato

  • validazione
  • codice a barre
  • cifra di controllo

Ogni codice a barre per la vendita al dettaglio termina con una cifra che non fa affatto parte dell’identità dell’articolo. È aritmetica: una somma ponderata delle cifre che la precedono, ridotta a un singolo carattere e stampata perché uno scanner, o una persona che legge i numeri stampati sotto le barre, possa dire se il codice è sopravvissuto intatto.

EAN e UPC sono le due famiglie che la maggior parte delle persone incontra per prime, e sono parenti abbastanza stretti che spesso la stessa routine gestisce entrambe. Le differenze sono piccole, posizionali e facili da sbagliare, ed è per questo che questo articolo si concentra su dove inizia l’aritmetica anziché sull’aritmetica stessa.

Da dove viene l’ultima cifra di un codice a barre?

Lo schema è quello familiare. Ognuna delle cifre precedenti viene moltiplicata per un peso, i prodotti vengono sommati e il totale viene trasformato in un unico carattere finale. Per le famiglie di codici a barre descritte qui i pesi si alternano tra uno e un valore maggiore, e la cifra finale si ottiene portando la somma fino al multiplo di dieci successivo.

Lo scopo è ristretto e specifico. Un codice a barre viene letto da una macchina che può leggere male una barra, e la cifra finale serve a rendere evidenti la maggior parte delle letture errate prima che venga addebitato il prodotto sbagliato. È un dispositivo di rilevamento degli errori per un canale rumoroso, non un certificato di alcunché.

Poiché la somma copre soltanto le cifre contenute nel codice stesso, la cifra finale può essere ricalcolata da qualsiasi stringa candidata. È questo che rende il controllo abbastanza economico da eseguire a ogni scansione, ed è anche il motivo per cui un codice che passa non è una prova riguardo al prodotto che sta dietro.

I codici in questo articolo sono descritti anziché stampati. Nessun codice a barre di un prodotto reale è riprodotto, e uno schema descritto è una convenzione pubblica anziché un’affermazione su un articolo in un qualsiasi scaffale.

EAN-13 e UPC-A: due lunghezze comuni, inizi dei pesi diversi

Le due famiglie condividono la loro aritmetica e differiscono nei dettagli che la circondano.

Proprietà EAN-13 UPC-A
Lunghezza totale La più lunga delle due La più corta delle due
Schema dei pesi Alternato, che parte da un lato Alternato, che parte dall’altro
Dove si vede Articoli per la vendita al dettaglio a livello internazionale Articoli per la vendita al dettaglio in Nord America
Relazione Il codice più corto può essere contenuto in quello più lungo con l’aggiunta di una cifra iniziale Un sottoinsieme della stessa famiglia aritmetica

La relazione tra loro è il motivo per cui le librerie spesso espongono un’unica funzione che decide prima la lunghezza e sceglie poi l’inizio dei pesi. Una routine che presume un solo schema di pesi a prescindere dalla lunghezza calcolerà una cifra di controllo sbagliata per ogni codice dell’altra dimensione — e lo farà con sicurezza, producendo un valore che fallisce solo quando incontra dati reali.

I nomi vale la pena di usarli con precisione proprio qui. EAN-13 e UPC-A sono designazioni standard per due formati specifici, e chiamare ogni numero al dettaglio con uno dei due è una piccola abitudine che porta a un bug reale la prima volta che una routine deve accettarli entrambi.

L’idea di ponderare da destra

I pesi si alternano, e la domanda che decide la correttezza è quale posizione riceve quale peso. In questi schemi l’alternanza è ancorata all’estremità destra, quindi la cifra immediatamente prima del carattere di controllo porta sempre lo stesso peso e lo schema si sviluppa verso sinistra da lì.

Ancorare da destra anziché da sinistra è ciò che permette a un’unica routine di funzionare su lunghezze diverse. Se lo schema fosse ancorato a sinistra, aggiungere una cifra invertirebbe la parità di ogni posizione e cambierebbe completamente il significato del codice. Ancorare a destra significa che il vicinato del carattere di controllo è stabile e la cifra in più all’estrema sinistra è semplicemente un termine in più nella somma.

Questa è la singola causa più comune di difetti fuori di uno nel codice dei codici a barre. È anche economica da testare: genera un codice valido, verificalo con la routine, poi estendilo con una cifra iniziale e verifica di nuovo. Una routine ancorata sul lato sbagliato sarà in disaccordo su una delle due lunghezze.

Cosa dice e cosa non dice un prefisso di codice a barre

Le cifre iniziali di un codice al dettaglio sono assegnate alle organizzazioni di numerazione, e l’assegnazione è pubblicata. È allettante leggerle come un’affermazione su dove è stato prodotto un articolo, e quella lettura è sbagliata. L’assegnazione identifica l’organizzazione che ha registrato il numero, e un’organizzazione registrata può far fabbricare merci in qualsiasi parte del mondo.

La stampa fisica dell’etichetta aggiunge un secondo strato di imprecisione. Lo stesso articolo può portare un codice stampato in un paese ed essere imballato in un altro, e un’azienda può avere registrazioni sotto più di un’assegnazione. Trattare il prefisso come un marcatore di origine di produzione produrrà affermazioni di approvvigionamento sicure e scorrette.

Per uno sviluppatore questo è un avvertimento sull’espansione incontrollata dell’ambito. Il codice a barre può dirti se le cifre sono internamente coerenti, e può dirti quale organizzazione ha registrato il numero se consulti l’assegnazione pubblicata. Tutto ciò che va oltre appartiene a un sistema diverso con dati diversi.

Una prova superata significa che il codice a barre verrà scansionato?

No, e vale la pena separare i due fallimenti. La cifra di controllo protegge dal fatto che le cifre siano sbagliate; non dice nulla sulla stampa. Barre sbavate, troncate, stampate con un ingrandimento sbagliato o su una superficie curva possono sconfiggere uno scanner anche se le cifre sottostanti sono perfettamente coerenti.

Né un codice corretto dimostra che l’articolo esista nel tuo catalogo. Un codice ben formato può riferirsi a un articolo che non hai mai avuto in assortimento, o a un codice che non è mai stato assegnato affatto. L’appartenenza al catalogo e la coerenza aritmetica sono proprietà indipendenti, ed è per questo che un processo di ricezione merci ha bisogno di una consultazione del proprio elenco oltre a un passo di validazione.

Il caso inverso è altrettanto importante. Una lettura errata che uno scanner corregge silenziosamente, o un codice che fallisce il controllo perché l’etichetta era danneggiata, non è una prova di frode. È una prova riguardo all’etichetta.

Per gli sviluppatori: scansione in blocco e localizzazione degli errori

La validazione dei codici a barre di solito arriva in volume, il che trasforma due piccole decisioni di progetto in decisioni grandi.

  1. Decidi la lunghezza dalle sole cifre, poi scegli l’inizio dei pesi dalla lunghezza. Non affidarti a un chiamante per dichiarare quale famiglia sta inviando.
  2. Rifiuta i caratteri illeciti prima che parta la somma, così una descrizione incollata non diventa un misterioso fallimento del checksum.
  3. In caso di fallimento, di’ se la lunghezza era sbagliata o se la cifra finale non concordava; quei due messaggi mandano un utente verso rimedi completamente diversi.
  4. Quando controlli un file, segnala la riga e il valore così come sono arrivati, così un operatore di magazzino può trovare l’etichetta in questione.

Ogni schema qui appartiene alla stessa famiglia basata sul modulo degli altri descritti nella panoramica degli algoritmi cifra di controllo, il che è utile quando un’unica routine deve servire diversi tipi di codice. I numeri di libro e di serie seguono lo stesso principio con le loro particolarità, trattate in Cifre di controllo ISBN ISSN.

Passi successivi

Scegli un codice valido per ciascuna delle due lunghezze e conferma che la tua routine le accetti entrambe, poi cambia una singola cifra in ciascuna e conferma che le rifiuti entrambe. In seguito, controlla cosa fa il tuo sistema quando l’aritmetica passa ma il codice è assente dal tuo catalogo — lo strumento di validazione dei numeri mostra come un validatore dovrebbe formulare un risultato che riguarda soltanto le cifre.

Continua a leggere

Guide su Validatore di numeri di carta e documenti d'identità