Come funziona davvero un codice QR? La tecnologia dietro il mosaico di pixel
Basta una breve scansione con la fotocamera dello smartphone e subito si apre un sito web, ci si connette al Wi-Fi o si salva una vCard nella rubrica. Ciò che nella vita di tutti i giorni sembra magia è in realtà una combinazione estremamente ben studiata di informatica, matematica e ottica.
Ma come si forma, in realtà, questo caratteristico motivo in bianco e nero a partire da un lungo indirizzo Internet o da un testo? Dove sono nascosti i dati nel codice e perché la fotocamera ne riconosce il contenuto anche quando il codice QR è inclinato o leggermente danneggiato?
In questo articolo analizzeremo passo dopo passo il funzionamento del codice Quick Response (codice QR).
1. Il principio di base è semplice: i caratteri vengono trasformati in zeri e uno.
I computer parlano il linguaggio binario, ovvero comprendono esclusivamente 0 e 1. Prima che un’informazione possa essere rappresentata come motivo nel codice QR, deve quindi essere convertita in bit. Per risparmiare spazio di memoria, il software QR utilizza diverse modalità di codifica:
- Modalità numerica: per cifre sole (0–9). Molto efficiente, poiché tre cifre vengono raggruppate in dieci bit.
- Modalità alfanumerica: per cifre, lettere maiuscole e caratteri speciali selezionati.
- Modalità byte: per testi generici, lettere minuscole, dieresi (UTF-8) e URL.
- Modalità kanji: compressione specifica per i caratteri giapponesi.
Uno sguardo dietro le quinte mostra come «QR» si trasformi in un codice binario.
Per comprendere quanto sia efficiente in termini di spazio un codice QR, consideriamo la modalità alfanumerica. A ogni carattere viene assegnato un valore numerico fisso (A = 10, B = 11, ..., Q = 26, R = 27).
Per evitare di dover memorizzare ogni lettera singolarmente, l’algoritmo raggruppa sempre due caratteri.
- I valori di Q (26) e R (27) vengono sommati: $26 \times 45 + 27 = 1197$.
- Il numero 1197 viene rappresentato come numero binario a 11 bit:
10010101101.
In questo modo, le due lettere QR si trasformano esattamente in 11 bit composti da zeri e uno. Se alla fine di una stringa rimanesse una sola lettera, questa verrebbe codificata con 6 bit (ad es. $Q \rightarrow 26 \rightarrow 011010$).
2. Il percorso dal codice binario al motivo grafico finale
Non appena il tuo testo viene tradotto in una sequenza di zeri e uno, questa viene sottoposta a diverse fasi di elaborazione tecnica:
Fase A: Dati tecnici aggiuntivi e correzione degli errori
La sequenza di zeri e uno che contiene i tuoi contenuti non si limita a questo. Davanti ai dati utili viene inserita un’intestazione. Questa comunica allo scanner: «Attenzione, ora segue un testo in modalità byte della lunghezza di 25 caratteri!»
Successivamente, un procedimento matematico, la cosiddetta correzione di errori Reed-Solomon, calcola dei bit di sicurezza aggiuntivi. Questi garantiscono che il codice possa essere letto anche se fino al 30% della sua superficie è coperta o danneggiata (ad esempio da un logo aziendale posizionato al centro).
Fase B: Distribuzione nella griglia (moduli)
I singoli quadrati nel codice QR sono chiamati moduli. In linea di principio vale quanto segue:
- 0 = modulo bianco
- 1 = modulo nero
I bit, tuttavia, non vengono semplicemente inseriti riga per riga dall’alto a sinistra verso il basso a destra. L’assegnazione dei dati inizia in basso a destra e si snoda in strette colonne da due, alternandosi verso l’alto e verso il basso attraverso la griglia. In questo modo, le aree funzionali riservate (come gli angoli) vengono automaticamente saltate.
Per questo motivo, nel codice QR finito non puoi mai indicare un singolo quadrato nero e dire: «Questo è la “h” nell’indirizzo web».
Fase C: Il trucco della mascheratura (Perché l’1 non è sempre nero)
Se i bit venissero disegnati direttamente, potrebbero formarsi casualmente grandi blocchi neri, lunghe strisce bianche o motivi fuorvianti che confonderebbero la fotocamera.
Per questo motivo, il software sovrappone un motivo di mascheratura alla matrice. In totale esistono otto maschere standardizzate. Attraverso un’operazione matematica XOR, la maschera inverte determinati bit:
- 0 diventa 1 (il bianco diventa nero)
- 1 diventa 0 (il nero diventa bianco)
Lo scanner riconosce, grazie ai bit di controllo presenti nell’intestazione, quale maschera è stata utilizzata e, durante la lettura, annulla questa operazione in una frazione di secondo.
3. L’anatomia di un codice QR: cosa significano i singoli motivi?
Osservando più da vicino un codice QR, sembra un mosaico casuale. In realtà, però, ogni singolo elemento è posizionato rigorosamente secondo lo standard ISO. Si può immaginare la struttura come l’anatomia di un volto. Alcune caratteristiche si trovano sempre nella stessa posizione, in modo che lo smartphone riconosca il codice a prima vista.
Un codice QR classico si articola nelle seguenti zone principali:
1. I tre grandi quadrati agli angoli (motivi di riconoscimento della posizione/Finder Patterns)
- Si trovano in alto a sinistra, in alto a destra e in basso a sinistra.
- Cosa fanno: sono l’elemento più evidente del codice QR. Questi tre punti di riferimento segnalano immediatamente alla fotocamera: «Attenzione, qui c’è un codice QR!» Comunicano al software in un batter d’occhio la posizione, le dimensioni e l’angolo di inclinazione, in modo che la fotocamera riconosca se lo smartphone è tenuto dritto o inclinato.
2. Le linee di collegamento tratteggiate (Timing Patterns)
- Si trovano in basso a destra e indicano alla fotocamera dove si trovano “sopra” e “sotto”.
- Cosa fanno: queste linee sono costituite da moduli alternati neri e bianchi. Funzionano come un righello per lo scanner: sulla base di questi punti, il software calcola le dimensioni del sistema di griglia (dalla versione 1 con 21 × 21 campi alla versione 40 con 177 × 177 campi).
3. I piccoli quadrati interni (modelli di allineamento/Alignment Patterns)
- Si trovano nella zona in basso a destra e, nei codici complessi, sono distribuiti su tutto il modello.
- Cosa fanno: questi quadrati più piccoli fungono da mirini digitali. Aiutano lo scanner a compensare le distorsioni, ad esempio quando il codice QR è stampato su una lattina di Coca-Cola piegata o il volantino è sgualcito.
4. La zona di controllo (informazioni sul formato)
- Si trovano direttamente adiacenti ai tre grandi quadrati angolari.
- Cosa fanno: qui sono contenute le istruzioni tecniche per lo scanner. In questi pochi pixel sono memorizzate due informazioni fondamentali: 1. Quale livello di correzione degli errori (L, M, Q o H) viene utilizzato e quale modello di mascheramento è stato applicato ai dati.
5. Il bordo protettivo invisibile (zona di silenzio/Quiet Zone)
- Si tratta del bordo completamente bianco e non stampato che circonda l’intero codice QR.
- Funzione: affinché la fotocamera possa rilevare correttamente i bordi esterni del codice, è necessaria una distanza di sicurezza da testi, immagini o grafiche di sfondo. Questo bordo deve avere uno spessore di almeno quattro moduli (larghezza in pixel). Se manca la zona di sicurezza, spesso la fotocamera rifiuta la scansione.
4. Cosa succede durante la scansione sul tuo smartphone?
Quando punti la fotocamera su un codice QR, in background si svolgono le seguenti fasi:
- Ricerca: la fotocamera scansiona l’immagine video alla ricerca dei tre grandi motivi di individuazione.
- Trasformazione: il software calcola la prospettiva e “radia” digitalmente un’immagine eventualmente fotografata di sbieco.
Rimozione della maschera: il sistema a griglia legge le informazioni sul formato, riconosce il motivo di mascheramento e rimuove la maschera.
Applicazione della correzione degli errori: eventuali graffi, sfocature o elementi che ostruiscono la visione vengono corretti matematicamente.
Decodifica: gli zero e gli uno vengono riconvertiti, secondo le regole della modalità, in testo leggibile, numeri o comandi di controllo.
Eseguire l’azione: lo smartphone riconosce il tipo di dati (ad es. https:// per un URL, WIFI: per i dati di accesso o BEGIN:VCARD per i contatti) e suggerisce l’app appropriata.
Approfondimento tecnico: spiegazione delle domande più importanti
È necessaria una connessione Internet per scansionare un codice QR?
No, non per il processo di scansione in sé. La conversione dei pixel in testo avviene localmente sul tuo smartphone. Se il contenuto è solo testo, una vCard o dati di accesso Wi-Fi, tutto funziona completamente offline. Solo quando il codice contiene un indirizzo Internet (URL) e desideri aprirlo, è necessaria una connessione dati.
Un codice QR è crittografato?
No. Un codice QR è semplicemente codificato, ma non crittografato. Qualsiasi scanner universale per codici QR è in grado di leggere i dati in esso contenuti. Informazioni riservate come password, dati bancari o PIN personali non dovrebbero quindi mai essere memorizzate senza protezione in un codice QR standard.
Perché alcuni codici QR sembrano molto più fini e fitti di altri?
Più dati vengono memorizzati direttamente nel codice – ad esempio un testo lungo rispetto a un link breve – più moduli sono necessari. Il codice passa quindi a una versione superiore (dalla versione 1 con 21 × 21 moduli fino alla versione 40 con 177 × 177 moduli).
Statici vs. dinamici: perché i codici dinamici rimangono più compatti
- Codici QR statici: memorizzano direttamente la destinazione finale (ad es. un URL lungo 150 caratteri). Il motivo diventa molto denso e più difficile da scansionare.
- Codici QR dinamici: memorizzano solo un link di reindirizzamento ultracorto (ad es.
qrown.io/12da7). Il codice rimane visivamente estremamente semplice, facile da scansionare e la destinazione effettiva può essere sostituita in qualsiasi momento sul server, senza dover ristampare il codice.
Lista di controllo per codici QR funzionanti
Se crei o fai progettare i tuoi codici QR, presta attenzione ai seguenti principi fondamentali:
- Utilizza link brevi: usa codici QR dinamici per mantenere bassa la densità dei moduli.
- Mantenere il contrasto: scegli un motivo scuro su sfondo chiaro (i codici invertiti causano problemi ad alcune fotocamere più vecchie).
- Rispettare la zona di margine: lascia almeno 4 moduli di distanza dai testi, dai bordi di taglio o dalla grafica.
- Adatta la correzione degli errori: quando integri loghi nel codice, scegli almeno un livello di correzione degli errori Q o H.
Domande frequenti (FAQ)
Da quanti moduli è composto un codice QR?
I codici QR più piccoli (versione 1) sono composti da 21 × 21 moduli, ovvero 441 caselle. La variante più grande (versione 40) ha una griglia di 177 × 177 moduli, ovvero 31'329 caselle.
Un codice QR può contenere virus o malware?
Un codice QR di per sé contiene solo testo e non può eseguire direttamente codice dannoso. Tuttavia, può reindirizzare a un sito web di phishing appositamente creato o a un download dannoso. Per questo motivo, prima di aprirlo, controlla sempre l’anteprima del dominio sul tuo smartphone!
Quale modalità consente di risparmiare più spazio nel codice QR?
La più efficiente è la modalità numerica (solo numeri), seguita dalla modalità alfanumerica. La modalità byte (per URL generici e caratteri speciali) richiede invece più spazio di memoria per ogni carattere.