Come funzionano i QR code?

Cosa fa ogni parte del disegno, come la fotocamera trasforma i quadratini di nuovo in testo e perché un codice con un buco in mezzo si legge lo stesso.

Risposta breveUn QR code memorizza i dati come quadratini bianchi e neri chiamati moduli. Alcuni pattern fissi negli angoli permettono allo scanner di trovare e orientare il codice; il resto della griglia contiene i dati più i codici di correzione Reed–Solomon, che permettono di ricostruire il testo originale anche quando una parte del simbolo è illeggibile.

Le parti del disegno

Non tutti i quadratini di un QR code trasportano dati. Una buona parte è struttura, e sapere cosa è cosa spiega quasi tutto il comportamento del formato.

Le strutture fisse presenti in ogni QR code
ParteDoveA cosa serve
Pattern di posizionamentoTre angoliGrandi quadrati concentrici che permettono allo scanner di localizzare il codice e capirne la rotazione.
SeparatoriAttorno a ogni pattern di posizionamentoUn bordo bianco largo un modulo che evita che il pattern si confonda con i dati vicini.
Pattern di temporizzazioneUna riga e una colonnaModuli alternati bianchi e neri che indicano allo scanner la dimensione e il passo della griglia.
Pattern di allineamentoDalla versione 2 in suQuadrati più piccoli che correggono la distorsione prospettica quando inquadri di sbieco o su una superficie curva.
Informazioni di formatoAccanto ai pattern di posizionamentoIndicano quale livello di correzione e quale maschera sono stati usati. Sono salvate due volte, così resistono ai danni.
Zona di rispettoFuori dal simboloQuattro moduli di spazio libero. Non è decorazione: senza, lo scanner non capisce dove finisce il codice.

Tutto il resto contiene il messaggio e la sua correzione degli errori, scritti a zigzag partendo dall’angolo in basso a destra e salendo, due colonne alla volta.

Versioni: come cresce la griglia

I QR code esistono in quaranta dimensioni, chiamate versioni. La versione 1 misura 21 × 21 moduli; ogni passo aggiunge quattro moduli per lato, quindi la versione 40 misura 177 × 177. Il generatore sceglie la versione più piccola in cui entrano i tuoi dati al livello di correzione richiesto.

Ecco perché, a parità di dimensione di stampa, un URL corto produce un codice visibilmente più «grosso» di uno lungo. Il quadrato fisico resta uguale; cambia il numero di moduli stipati dentro. Un codice a grana grossa sopporta luce scarsa, stampa economica e distanza. Uno fitto no.

Il generatore di questo sito indica la versione e il numero di moduli sotto ogni codice che crea, così vedi la densità prima di mandarlo in stampa.

Correzione degli errori: perché i danni non contano

I QR code usano la correzione degli errori Reed–Solomon, la stessa famiglia di matematica che permette a un CD graffiato di continuare a suonare. Dati ridondanti vengono distribuiti nel simbolo, così una perdita in una zona si può ricostruire con le informazioni presenti altrove.

I quattro livelli di correzione degli errori
LivelloRecuperabileUso tipico
L (Low)circa 7%Schermi puliti, massimo dei dati nel minimo spazio.
M (Medium)circa 15%Il valore predefinito più comune. Buon equilibrio per la stampa.
Q (Quartile)circa 25%Stampe che verranno maneggiate, o codici con un logo al centro.
H (High)circa 30%Etichette industriali, forte usura, loghi grandi sovrapposti.

Una correzione più alta ha un costo: la ridondanza occupa capacità, quindi lo stesso testo spinge il codice verso una versione più grande con moduli più piccoli. Oltre un certo punto, la robustezza in più viene annullata dai moduli diventati troppo piccoli per essere letti in modo affidabile.

È per questo compromesso che questo generatore usa il livello Q per i codici fino alla versione 12 e scende a M oltre quella soglia (un codice con logo usa invece H). Sotto la soglia, la protezione extra vale la densità; sopra, i moduli più piccoli fanno perdere più scansioni di quante la ridondanza ne salvi.

Mascheratura: perché due link simili sembrano completamente diversi

Una codifica grezza può facilmente produrre grandi aree vuote, lunghe sequenze dello stesso colore o forme che somigliano a un pattern di posizionamento: tutte cose che confondono gli scanner. Per evitarlo, l’encoder applica una maschera, cioè un disegno regolare combinato in XOR con l’area dati per spezzare quelle sequenze.

Le maschere definite sono otto. L’encoder le prova tutte, assegna a ciascun risultato un punteggio in base a regole di penalità per le caratteristiche indesiderate e tiene la migliore. La maschera scelta viene registrata nelle informazioni di formato, così il lettore può annullarla.

Ecco perché cambiare un solo carattere in un URL può stravolgere tutto il disegno: ora potrebbe vincere un’altra maschera, e l’intera area dati viene trasformata in modo diverso.

Cosa succede quando lo inquadri con la fotocamera

  1. Il fotogramma della fotocamera viene convertito in bianco e nero.
  2. Il software cerca il rapporto 1:1:3:1:1 di un pattern di posizionamento lungo linee orizzontali e verticali.
  3. Tre pattern di posizionamento danno posizione, scala e rotazione; i pattern di allineamento correggono la prospettiva.
  4. I pattern di temporizzazione definiscono la griglia dei moduli, e dalle informazioni di formato si ricavano maschera e livello di correzione.
  5. La maschera viene rimossa, i blocchi di dati e di correzione vengono separati e la decodifica Reed–Solomon ripara eventuali danni.
  6. I byte risultanti vengono interpretati (come URL, scheda contatto o testo semplice) e il telefono propone l’azione corrispondente.

Tutto questo avviene molte volte al secondo, ed è per questo che il codice sembra risolversi nell’istante in cui entra nell’inquadratura.

Guarda versione, livello di correzione e numero di moduli del tuo link:Genera un QR code

Domande correlate

Grazie alla correzione degli errori Reed–Solomon. Le informazioni ridondanti sono distribuite in tutto il simbolo, quindi può mancarne all’incirca dal 7% al 30%, a seconda del livello scelto quando il codice è stato creato, e i dati originali si ricostruiscono comunque alla perfezione.

È il margine vuoto largo quattro moduli attorno al simbolo, e sì, serve. Senza, lo scanner non riesce a capire dove finisce il codice e dove inizia la grafica intorno. Tagliare la zona di rispetto per far stare il codice nel layout è la causa più comune di un codice stampato che non funziona.

Perché l’encoder sceglie, tra gli otto disegni di maschera, quello con il punteggio migliore per quei dati specifici, e basta cambiare un carattere perché vinca un altro. La maschera si applica in XOR su tutta l’area dati, quindi una scelta diversa ridisegna l’intero codice.

Devono essere scuri su chiaro, con un contrasto forte. Il nero su bianco è il più affidabile; un inchiostro scuro su sfondo chiaro di solito funziona. Invertire i colori, chiaro su scuro, manda in crisi molti scanner, e un contrasto basso o le finiture metallizzate riducono parecchio la leggibilità.