Deprecated: Creation of dynamic property Timber\Site::$pingback is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Site.php on line 180

Deprecated: Creation of dynamic property Timber\User::$name is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/User.php on line 118

Deprecated: Creation of dynamic property Timber\Post::$has_disclaimer is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_edit_lock is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_edit_last is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_oembed_d73892a465bef2986f31c981f6bfbd7b is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_oembed_time_d73892a465bef2986f31c981f6bfbd7b is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$onesignal_meta_box_present is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$onesignal_send_notification is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$onesignal_modify_title_and_content is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$onesignal_notification_custom_heading is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$onesignal_notification_custom_content is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_focuskw is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_metadesc is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_linkdex is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_content_score is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_focuskeywords is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_keywordsynonyms is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_estimated-reading-time-minutes is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_wordproof_timestamp is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$tipologia is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_tipologia is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$attributi is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_attributi is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$in_evidenza_newsletter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_in_evidenza_newsletter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$inviato_in_newsletter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_inviato_in_newsletter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_category is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_blz_affiliation_attributes is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_content_type is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_attributes is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_wpseo_primary_speciali is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_thumbnail_id is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$response_body is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$status is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_yoast_indexnow_last_ping is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_oembed_4f57cb018493cd39394c85a9e4760360 is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$_oembed_time_4f57cb018493cd39394c85a9e4760360 is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_date_gmt is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$comment_status is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$ping_status is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_password is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_name is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$to_ping is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$pinged is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_modified is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_modified_gmt is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_content_filtered is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$guid is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$menu_order is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$post_mime_type is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$comment_count is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71

Deprecated: Creation of dynamic property Timber\Post::$filter is deprecated in /var/www/html/web/app/themes/ilsoftware/vendor/timber/timber/lib/Core.php on line 71
Sapevate che è possibile leggere i codici QR senza computer né smartphone? | IlSoftware.it

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