PDF417: come funziona il codice impilato di carte d'imbarco e documenti, e come leggerlo
Il PDF417 è un codice 2D di tipo impilato: un rettangolo formato da più righe sovrapposte di codice lineare. Contiene fino a circa 1850 caratteri di testo, 2710 cifre o 1108 byte, con correzione degli errori regolabile da 0 a 8. Lo trovi su carte d'imbarco, documenti d'identità esteri ed etichette di trasporto. Per leggerlo serve un imager 2D.
Struttura
Il nome descrive la struttura: ogni "parola di codice" (codeword) è formata da 4 barre e 4 spazi per una larghezza totale di 17 moduli. Un simbolo PDF417 ha:
- Pattern di start e stop a sinistra e a destra, uguali per tutte le righe: è il motivo per cui il PDF417 si riconosce dalle barre verticali continue ai lati.
- Indicatori di riga a sinistra e a destra, che dicono al lettore numero di riga, numero di colonne e livello di correzione.
- Da 1 a 30 colonne di dati e da 3 a 90 righe.
Siccome ogni riga dichiara la propria posizione, il lettore può ricostruire il simbolo anche leggendo le righe in ordine sparso: per questo alcuni lettori laser "raster" (a più linee) potevano leggerlo spazzando il codice dall'alto in basso.
Varianti da conoscere: PDF417 compatto (o troncato), senza indicatori di riga a destra per risparmiare spazio; MicroPDF417, più piccolo e con capacità ridotta; Macro PDF417, che divide dati lunghi su più simboli. Su molti lettori MicroPDF417 e Macro PDF417 sono opzioni separate, spesso disattivate di fabbrica.
Correzione degli errori e capacità
Il livello di correzione va da 0 (solo rilevamento) a 8 (massima ridondanza: 512 codeword di correzione). Più è alto, più il simbolo cresce a parità di dati. Lo standard suggerisce livelli minimi crescenti con la quantità di dati.
| Modalità di compattazione | Capacità massima |
|---|---|
| Numerica | 2710 cifre |
| Testo | circa 1850 caratteri |
| Byte | 1108 byte |
Sono valori teorici con correzione minima. Nella pratica i PDF417 su documenti e carte d'imbarco contengono da poche decine a qualche centinaio di caratteri.
Dove si trova
- Carte d'imbarco: lo standard IATA BCBP ammette PDF417 (molto diffuso sulle carte stampate) e codici 2D come Aztec e QR sulle versioni mobili.
- Documenti d'identità e patenti di diversi paesi, in particolare in Nord America.
- Etichette di trasporto e documenti di spedizione di alcuni corrieri.
- Applicazioni industriali dove serve molto testo su un'etichetta stretta e lunga.
Per biglietti e controllo accessi vedi anche eventi e biglietti.
Quali lettori lo leggono
| Lettore | PDF417 | Note |
|---|---|---|
| Imager 2D | Sì | Di solito abilitato di fabbrica |
| Laser raster dedicato | Sì, su modelli specifici | Tecnologia ormai superata |
| Laser a linea singola | No | Legge una riga alla volta senza ricostruire il simbolo |
| Imager lineare (CCD) | No | Acquisisce una sola riga |
| Smartphone | Dipende dall'app | Non tutte le app lo supportano |
Un PDF417 molto largo può non entrare nel campo visivo del lettore da vicino: allontanalo finché l'intero simbolo, comprese le barre di start e stop, è inquadrato. Le righe basse (simboli schiacciati in altezza per risparmiare spazio) sono un'altra causa frequente di mancata lettura. Il confronto tra tecnologie è in laser, CCD o imager 2D.
Cosa riceve il PC
Con l'identificatore AIM attivo il PDF417 è preceduto da un codice della famiglia ]L, spesso ]L2: il modificatore dipende dal modello e dalle opzioni, verificalo sul manuale. La cifra di controllo non esiste in senso classico: la correzione Reed-Solomon è interna e non viene trasmessa.
Il punto critico è il contenuto. I PDF417 su documenti contengono spesso caratteri di controllo come separatori di campo: a capo (LF, ASCII 10), CR (ASCII 13), RS (ASCII 30) o GS (ASCII 29). In emulazione tastiera questi caratteri diventano tasti Invio o combinazioni Ctrl che l'applicazione può interpretare come comandi:
Contenuto (schematico): CAMPO1<LF>CAMPO2<CR>CAMPO3<RS> Emulazione tastiera: CAMPO1 [Invio] CAMPO2 [Invio] CAMPO3 [carattere perso] Porta COM virtuale: tutti i byte, inclusi 0A, 0D e 1E
Se devi elaborare PDF417 con dati strutturati, una porta COM virtuale o un'integrazione via SDK è molto più affidabile dell'emulazione tastiera. Vedi USB HID o porta COM virtuale e la tabella dei caratteri di controllo ASCII. Per vedere quali caratteri invisibili arrivano usa il test del lettore.
Caso tipico: al check-in di un evento il lettore 2D legge la carta d'imbarco o il biglietto in PDF417 in un campo di ricerca del browser. A metà lettura la pagina invia il modulo: il primo a capo contenuto nel codice è diventato un Invio. Soluzione: un campo multiriga, la rimozione degli a capo tramite formattazione dei dati sul lettore, oppure un'integrazione che non passi per la tastiera.
Errori comuni
- Usare PDF417 per pochi dati: un Data Matrix o un QR Code occupano meno spazio e si leggono più facilmente.
- Livello di correzione 0 o 1 per simboli stampati: troppo fragile. Usa almeno i livelli raccomandati dallo standard.
- Comprare un lettore CCD "perché legge anche dagli schermi" per leggere carte d'imbarco: legge i codici lineari, non il PDF417.
Domande frequenti
Il PDF417 è un codice 2D?
Sì, è un 2D di tipo impilato (stacked), diverso dai codici a matrice come QR e Data Matrix ma comunque leggibile solo con imager 2D nella pratica attuale.
Perché si chiama 417?
Perché ogni codeword è formata da 4 barre e 4 spazi in 17 moduli. PDF sta per Portable Data File, non ha a che fare con il formato dei documenti Adobe.
Il mio lettore 2D non legge un MicroPDF417: è normale?
Spesso sì: MicroPDF417 è un'opzione separata e frequentemente disattivata di fabbrica. Attivala dal manuale o dal software di configurazione.
Fonti e riferimenti
Altro in Tipi di codici a barre
- Tipi di codici a barre: tabella comparativa completa
- Cifra di controllo: calcolo EAN, UPC, GTIN e SSCC
- Code 128: struttura, set A B C e impostazioni lettore
- Code 39: caratteri, mod 43, Code 32 e impostazioni
- Data Matrix e GS1 DataMatrix: struttura e lettura
- EAN-13 ed EAN-8: struttura, prefissi e lettura
- GS1-128 e Application Identifier: guida pratica
- GS1 DataBar: varianti, uso e impostazioni del lettore
- Interleaved 2 of 5 e ITF-14: struttura e lettura
- QR Code: struttura, capacità e lettura con lo scanner
- UPC-A e UPC-E: struttura, conversioni e lettura