Sapevate che è possibile leggere i codici QR senza computer né smartphone?

Un'applicazione Web mostra i segreti del funzionamento dei codici QR: quali informazioni conservano, dove sono collocate e come leggerle anche senza usare un computer o uno smartphone.

I codici QR sono un tipo di codice a barre bidimensionale in grado di memorizzare informazioni sia verticalmente che orizzontalmente. Sono composti da una matrice di punti (quadrati neri su sfondo bianco) che rappresentano dati: testi, URL (link), numeri di telefono e altre informazioni. Sono sempre più utilizzati, da tempo, per vari motivi: possono essere facilmente gestiti utilizzando dispositivi come smartphone o tablet dotati di fotocamera; leggere un codice QR richiede solo pochi secondi, rendendoli uno strumento rapido ed efficace per il trasferimento di informazioni; immagazzinano una grande quantità di dati rispetto ai tradizionali codici a barre lineari e sono molto versatili.

L’utilizzo dei codici QR, infatti, è diffuso in molteplici contesti: diventano strumenti per verificare biglietti e carte d’imbarco, per effettuare pagamenti digitali, sono utilizzati come etichette di prodotti, per la pubblicità, per l’accesso a menu digitali e via dicendo. È possibile usare un codice QR per condividere la password WiFi e si possono creare questi supporti anche in Windows, con una procedura tutto sommato piuttosto semplice.

L’applicazione Web Reading QR codes without a computer fa il punto sul “funzionamento” dei codici QR, svelandone tutti i segreti. Per semplicità, è evitata la trattazione della parte relativa alla correzione dell’errore, cosa che richiedere l’introduzione di concetti più complessi.

La struttura di base di un codice QR

Ogni codice QR può avere una dimensione prestabilita ovvero essere composto da un certo numero di moduli (conservano 1 bit ciascuno). La versione più piccola è formata da 21×21 moduli ma è possibile incrementare di 4 “celle” sia in orizzontale che in verticale per ottenere codici QR più ampi.

In corrispondenza di tre dei quattro angoli, sono presenti i cosiddetti Finder pattern, forme quadrate che consentono agli scanner di riconoscere più facilmente il codice QR (in rosso nell’immagine che segue). La linea bianca (nella figura è evidenziata con il colore verde) che cinge il perimetro dei Finder pattern li separa dalle informazioni vere e proprie contenute all’interno del codice bidimensionale.

Altre accortezze grafiche che aiutano gli scanner di codici QR sono Alignment pattern e Timing pattern: i primi sono completamente assenti nella versione 21×21 mentre i secondi (in arancione) sono righe orizzontali e colonne verticali che alternano sempre celle vuote e piene (bianco/nere).

Struttura QR code

Mask pattern e correzione degli errori

Mask pattern ed error correction sono due concetti chiave nei codici QR: contribuiscono alla loro robustezza e permettono di correggere gli errori. Il mask pattern è un modello predefinito applicato al modulo di dati di un codice QR per migliorarne la leggibilità e la rilevazione degli errori. Serve a rendere più uniforme la distribuzione delle informazioni, riducendo le possibilità di errori di lettura causati da pattern ripetitivi o da aree troppo omogenee. Ci sono 8 diversi mask pattern disponibili.

La tecnica di error correction permette di leggere comunque le informazioni, anche se parte del codice QR dovesse risultare danneggiato o illeggibile. I livelli di correzione degli errori disponibili sono quattro (L, M, Q, H), ognuno dei quali offre un diverso grado di tolleranza agli errori. I livelli superiori richiedono più moduli per la correzione degli errori (a discapito del volume di dati che possono essere conservati), ma offrono una maggiore robustezza.

Le informazioni di formattazione, conservate sia in posizione verticale che in orizzontale, riassumono proprio l’utilizzo di mask pattern ed error correction (sono indicate in blu nell’immagine pubblicata poco sopra).

Leggere un codice QR senza computer e smartphone

Sebbene sia teoricamente possibile, leggere un codice QR senza computer e smartphone è un po’ una “provocazione” perché richiede lo svolgimento di una serie di passaggi non banali. L’idea, tuttavia, è quella di spiegare l’approccio iterativo che seguono i dispositivi dotati di uno scanner per QR code, che può essere ad esempio formato dall’accoppiata tra una fotocamera digitale (come quella che equipaggia smartphone e tablet) e un’applicazione “ad hoc”.

Il primo passaggio consiste nel cercare l’informazione sulla mask pattern che è collocata in una posizione ben precisa (nell’immagine è evidenziata in giallo).

Codice QR: mask pattern

Un modulo nero corrisponde al valore 1, un modulo bianco al valore 0. Nell’esempio, quindi, la mask pattern vale 110 che, con una conversione dal codice binario al codice decimale, restituisce 6.

Conversione mask pattern in decimale

L’operazione XOR sul contenuto grafico del codice QR

Abbiamo detto in precedenza che esistono 8 differenti tipi di mask pattern. Il valore contenuto nei moduli evidenziati in precedenza, suggerisce lo specifico mask pattern da usare (con un codice che va da 0 a 7). Il mask pattern va sovrapposto al codice QR originale modificando il contenuto dei moduli di dati in base al colore della cella.

Quando le celle nere del mask pattern si sovrappongono a celle nere del codice QR originale, queste diventano bianche. Al contrario, quando le celle nere del mask pattern si sovrappongono a celle bianche del codice QR originale, queste diventano nere. Infine, quando le celle bianche del mask pattern si sovrappongono a celle bianche del codice QR originale, queste rimangono bianche.

L’operazione che si compie è una disgiunzione esclusiva o XOR. Il processo, come accennato in precedenza, contribuisce a garantire una distribuzione uniforme dei dati nel codice QR, migliorando la leggibilità e la resistenza agli errori di lettura.

Il quadrato 2×2 nell’angolo inferiore destro del codice QR restituisce le informazioni sulla codifica, ovvero sulla tipologia di informazioni che il codice QR contiene. Esistono diverse modalità di codifica: la più versatile è byte perché consente la memorizzazione di informazioni binarie. È adatta per codificare testo in formato UTF-8, codifica che dà modo di rappresentare i caratteri speciali presenti in molte lingue.

Passare alla lettura dei dati

Completata con successo l’operazione di XORing, è possibile passare alla fase di lettura dei dati contenuti nel codice QR. L’acquisizione dei dati avviene partendo dall’angolo in basso a destra quindi procedendo “a zigzag”. Ovviamente, è necessario saltare le aree contenenti Finder, Alignement e Timing pattern, le informazioni sul formato e così via poiché si tratta di zone che non contengono dati utili. Per lo stesso motivo, va escluso il contenuto della prima cella 2×2 che restituisce, come visto in precedenza, le informazioni di codifica.

Lettura dati contenuti nel codice bidimensionale

Se si ha a che fare con una “codifica byte“, il contenuto dei moduli che costituiscono il codice QR va acquisito a gruppi di 8 (1 byte = 8 bit), muovendosi dall’angolo in basso a destra e procedendo verso l’alto. Il primo byte restituisce la lunghezza della stringa, mentre dal secondo byte in poi si può estrarre, procedendo un carattere per volta, tutto il contenuto del codice QR.

Esempio XOR

Nell’esempio in figura, il codice QR precedentemente “XORato” a partire dal corrispondente mask pattern, presenta un valore “byte” nel riquadro in giallo (in basso a destra). Il primo gruppo di 8 bit (1 byte) corrisponde a 00001100 (sempre leggendo dal basso verso l’alto), ovvero al valore decimale 12. Significa che il codice QR in esame contiene una stringa lunga complessivamente 12 byte (nel nostro caso, il classico “Hello World!“).

Il primo gruppo di 8 bit in blu (01001000) corrisponde al valore H in esadecimale ossia al primo carattere della stringa Hello World!. Proseguendo in verticale e verso sinistra, la stringa andrà via via a comporsi.

Codice ASCII QR code

L’esadecimale 48 corrisponde proprio al codice ASCII del carattere “H” maiuscolo (verificare il valore HEX, ad esempio, in questa pagina).

Generare qualunque codice QR

Per sperimentare in proprio, l’applicazione Web disponibile qui consente di creare un codice QR inserendovi la stringa specificata dall’utente. Tutte le immagini proposte di seguito cambiano di conseguenza per aiutare ciascun utente a studiare ogni singolo caso specifico.

La stessa cosa si può fare scansionando qualsiasi codice preesistente ed è addirittura possibile richiedere la generazione di QR code a partire da termini inglesi generati in modo del tutto casuale.

Leggere codice QR

Le immagini dei codici QR pubblicate nell’articolo, sono tratte da “Reading QR codes without a computer“.

Ti consigliamo anche

Link copiato negli appunti