Codice QR

I codici QR (abbreviazione di "Quick Response", risposta rapida) sono un tipo di codice a barre 2D composto da una griglia quadrata di caselle scure e chiare e da tre quadrati prominenti negli angoli in alto a sinistra, in alto a destra e in basso a sinistra.

I codici QR sono utilizzati nella vendita al dettaglio, nella logistica, nella pubblicità al consumatore e nelle applicazioni di biglietteria aerea. Possono memorizzare molte informazioni in un piccolo spazio fisico—dalle informazioni sul prodotto all'URL di un sito web—e dispongono di robuste capacità di correzione degli errori che mantengono la leggibilità anche se parte del codice a barre è oscurata o danneggiata.

Questa guida fornisce agli sviluppatori software le informazioni necessarie per creare applicazioni che generano o decodificano codici QR.

Che cos'è un codice QR?

Un codice QR è un codice a barre bidimensionale che memorizza un grande volume di dati in un piccolo spazio fisico. Codifica i dati in una griglia quadrata di caselle scure e chiare e può essere letto da qualsiasi orientamento (sinistra, destra, alto o basso).

I codici QR sono una rappresentazione grafica di dati leggibili da macchina, noti come supporto dati. I dati all'interno del supporto sono noti come struttura dati, codificati in diversi formati, e determinano come analizzare il payload dopo la decodifica. I codici QR supportano i set di caratteri alfanumerici, numerici, binari a 8 bit e kanji.

I codici QR sono stati inventati nel 1994 da Masahiro Hara di DENSO Wave per tracciare i componenti utilizzati nella produzione di automobili. Ci sono stati diversi aggiornamenti allo standard del codice QR da allora. Questa guida si concentra sul codice QR "Modello 2" ampiamente diffuso, standardizzato in ISO/IEC 18004:2024.

Prova l'SDK Scandit Barcode Scanner

Valuta la nostra decodifica di codici QR con una prova gratuita di 30 giorni

Prova gratuitamente

Come funziona un codice QR

Un codice QR contiene questi componenti:

  • Pattern di ricerca: Tre grandi quadrati situati negli angoli in alto a sinistra, in alto a destra e in basso a sinistra per stabilire la posizione e l'orientamento del simbolo.
  • Pattern di temporizzazione: Linee punteggiate tra i pattern di ricerca per aiutare gli scanner a determinare la struttura e l'orientamento dei moduli dati del simbolo.
  • Pattern di allineamento: Piccoli quadrati che gli scanner utilizzano per correggere la distorsione dell'immagine.
  • Informazioni sul formato: Strisce di quadrati che contengono dettagli sul livello di correzione degli errori e sul pattern di mascheratura utilizzato nel codice.
  • Informazioni sulla versione: Blocchi che definiscono le dimensioni e le capacità del simbolo, utilizzati solo per le versioni del codice QR 7 e superiori.
  • Moduli dati: La griglia di quadrati neri e bianchi in cui sono memorizzate le informazioni del simbolo.
  • Zona silenziosa: Il bordo attorno al codice che lo separa dallo sfondo.

Quali sono le versioni del codice QR?

Le versioni del codice QR vanno da 1 a 40, ciascuna con un numero diverso di moduli dati che ne determinano la capacità di dati e le dimensioni fisiche.

Il numero di moduli aumenta di quattro per lato per ogni incremento di versione. La versione 1 ha 21x21 moduli e la versione 40 ha 177x177 moduli.

Quali sono i tipi di codice QR?

I tipi di codici QR sono classificati in base alla capacità dei dati, alle caratteristiche fisiche e alle funzionalità. La tabella seguente spiega le differenze tra loro:

Tipo di codice QR

Caratteristiche fisiche

Capacità massima di dati (caratteri numerici)

Codice QR Modello 1

Il codice QR originale, definito da una griglia quadrata con pattern di ricerca prominenti.

1,167
(Versione 14, moduli 73x73)

Codice QR Modello 2

Simile al Modello 1, con un pattern di allineamento aggiunto per aiutare gli scanner a leggere in modo fluido, anche se il simbolo è distorto.

7,089
(Versione 40, moduli 177x177)

Micro codice QR

Contiene un solo pattern di rilevamento della posizione e ha una zona silenziosa più piccola, rendendo possibili dimensioni del simbolo più ridotte.

35
(Versione M4, moduli 17x17)

Micro codice QR rettangolare (rMQR)

Utilizza una forma rettangolare, facilitando l'applicazione in spazi stretti.

361
(Versione 32, 17x139)

Codice QR con funzione segreta (SQRC)

Simile al Modello 1/Modello 2, ma i dati sono suddivisi tra aree pubbliche e aree crittografate per migliorare la sicurezza.

7,089
(Versione 40, moduli 177x177)

FrameQR

Simile al Modello 1/Modello 2, ma include un'area canvas per inserire immagini. Definito dalla tecnologia proprietaria di DENSO Wave, non uno standard aperto come ISO.

7,089
(Versione 40, moduli 177x177)

Codice iQR

Simile al Modello 2 e supporta sia forme quadrate che rettangolari. Definito dalla tecnologia proprietaria di DENSO Wave, non uno standard aperto come ISO.

40,000
(Versione 61, moduli 422x422)

Qual è la differenza tra codici QR statici e dinamici?

I dati codificati nei codici QR statici non possono essere modificati dopo la creazione, mentre i codici QR dinamici consentono alle aziende di modificare la destinazione di scansione anche dopo che i codici sono stati creati e stampati.

Codici QR statici

Una volta stampati o distribuiti, i dati codificati in un codice QR statico sono permanenti. Se l'URL di destinazione o il contenuto cambia, è necessario creare un nuovo codice. I codici statici sono spesso utilizzati per riferimenti fissi come numeri di serie, credenziali Wi-Fi o campagne di marketing una tantum.

Codici QR dinamici

Un codice QR dinamico codifica un URL breve che si risolve in un servizio di reindirizzamento. Quando un utente scansiona il codice, lo scanner risolve l'URL breve e reindirizza alla destinazione corrente. Questo meccanismo di indirezione abilita due funzionalità:

  • Modificabilità: La pagina di destinazione o la funzione dietro il codice QR può essere aggiornata senza ristampare il simbolo, rendendoli utili per campagne di lunga durata o per la gestione degli asset.
  • Analisi: Poiché ogni scansione passa attraverso un servizio di reindirizzamento, gli utenti possono acquisire statistiche di scansione come conteggio, timestamp, geolocalizzazione e sistema operativo del dispositivo. Queste metriche aiutano a misurare il coinvolgimento o a monitorare l'utilizzo.

Quanti dati può memorizzare un codice QR?

La capacità di dati di un codice QR è correlata alla sua versione. Ciascuna ha una capacità massima in base alla quantità di dati, al tipo di carattere e al livello di correzione degli errori utilizzato.

La tabella seguente, adattata dal sito DENSO Wave sui codici QR, mostra le dimensioni di archiviazione per alcune versioni del Modello 2 al livello di correzione degli errori più basso (L, con un tasso di ripristino dei dati approssimativo del 7%):

Versione

Caratteri massimi (alfanumerici)

Caratteri massimi (numerici)

Caratteri massimi (binario a 8 bit)

Caratteri massimi (kanji)

Dimensione dei moduli

1

25

41

17

10

21x21

20

1,249

2,061

858

528

97x97

30

2,520

4,158

1,732

1,066

137x137

40

4,296

7,089

2,953

1,817

177x177

Come vengono codificati i dati in un simbolo di codice QR?

I codici QR supportano quattro schemi di codifica:

  • Alfanumerico: cifre decimali da 0 a 9, lettere maiuscole, i simboli $, %, *, +, -, ., / e :, e il carattere spazio.
  • Numerico: cifre decimali da 0 a 9.
  • Binario a 8 bit: caratteri del ISO-8859-1 set di caratteri.
  • Kanji: caratteri a doppio byte del set di caratteri Shift JIS.

È possibile utilizzare più schemi di codifica all'interno dello stesso codice QR impostando il flag di modalità prima di ogni sezione di dati codificata con quello schema.

I codici QR includono anche diverse funzionalità, note come modalità, che vengono impostate durante la codifica:

  • Interpretazione del canale esteso (ECI): consente agli utenti di codificare dati utilizzando set di caratteri Unicode internazionali diversi dall'impostazione predefinita ISO-8859-1.
  • Aggiunta strutturata: consente di suddividere i dati in un massimo di 16 simboli QR code separati ma logicamente collegati.
  • FNC1: consente al QR code di funzionare come un codice a barre GS1 definito dallo standard GS1 Digital Link. I settori della vendita al dettaglio, del magazzinaggio e della catena di approvvigionamento lo utilizzano comunemente per codificare URL.

La codifica GS1 deve essere abilitata durante la generazione di un QR code, ed è responsabilità del lettore di codici a barre identificare e decodificare i dati GS1.

Il QR code a destra contiene la stringa di dati JQ3013456789012345611210714. Questa si suddivide nei seguenti componenti:

  • JQ3: Carattere simbolo Funzione 1 (FNC1) che identifica questo come un QR code GS1.
  • 01 34567890123456: Identificatore di applicazione (AI) che lo definisce come un Numero di identificazione commerciale globale (GTIN), e il GTIN del prodotto.
  • 11 210714: Identificatore di applicazione (AI) che lo definisce come data di produzione, e la data nel formato AAMMGG.

Correzione degli errori del QR code

I QR code utilizzano il metodo di correzione degli errori Reed-Solomon. Questo approccio converte i dati originali in un polinomio per definire un insieme univoco di punti, che vengono poi incorporati nel simbolo. Il risultato è un simbolo che contiene i dati originali più un'espressione polinomiale che gli scanner possono utilizzare per ricostruire il QR code.

Esistono quattro livelli di correzione degli errori in un QR code:

  • L: è possibile ripristinare il 7% dei dati.
  • M: è possibile ripristinare il 15% dei dati.
  • Q: è possibile ripristinare il 25% dei dati.
  • H: è possibile ripristinare il 30% dei dati.

Livelli di correzione degli errori più elevati richiedono una maggiore capacità di dati e dimensioni fisiche.

Dove viene utilizzato un QR code?

I QR code sono supporti di dati versatili adottati da molti settori perché sono veloci da scansionare, adattabili alle distorsioni e possono trasportare payload strutturati o in formato libero.

Esempi di applicazione includono:

  • Produzione: Stampato su parti, imballaggi o attrezzature per codificare ID prodotto, numeri seriali o informazioni su lotti e batch.
  • Biglietteria: Utilizzato per biglietti di eventi, carte d'imbarco o credenziali di controllo accessi che possono essere rapidamente convalidate ai punti di ingresso.
  • Marketing: Inserito in annunci pubblicitari stampati, segnaletica, biglietti da visita o imballaggi di prodotti per collegare direttamente gli utenti a pagine di destinazione, promozioni o download di app.
  • Logistica: Applicato a scatole, pallet o etichette di spedizione per semplificare il tracciamento, migliorare la tracciabilità e collegare le spedizioni ai sistemi della catena di approvvigionamento.

Cosa rende unico il QR code?

Il principale vantaggio dei QR code è il loro equilibrio tra capacità di dati, robustezza di scansione e flessibilità delle funzionalità. Sono facili da acquisire a distanza o con angolazioni inclinate, codificano tipi di dati diversi in un formato compatto e sono ampiamente riconosciuti dai dispositivi consumer.

Principali vantaggi dei QR code rispetto ad altri tipi di codici a barre

  • Leggibile da qualsiasi direzione, consentendo agli utenti di scansionare gli articoli con orientamenti diversi rispetto al proprio dispositivo.
  • Rispetto ai codici a barre 1D, i QR code possono memorizzare più dati (migliaia di caratteri rispetto a una dozzina di cifre) e sono ancora scansionabili anche se parte del codice è danneggiata, grazie alla correzione degli errori integrata. Il loro formato quadrato è anche più efficiente in termini di spazio, riducendo l'ingombro dell'etichetta pur supportando dati di lunghezza variabile.
  • Rispetto ai codici Data Matrix, i QR code dispongono di pattern di ricerca più robusti (tre grandi quadrati angolari) e funzionalità di allineamento, che migliorano la robustezza di scansione quando i simboli sono distorti o acquisiti da grandi distanze. Supportano inoltre set di caratteri multibyte, come il kanji, che Data Matrix non supporta nativamente. Il compromesso è che un QR code richiede più spazio fisico per memorizzare la stessa quantità di dati.
  • Flessibilità della correzione degli errori: i QR code consentono la selezione di quattro livelli di correzione degli errori (L, M, Q, H), permettendo agli utenti di bilanciare capacità dei dati e resilienza.
  • Conformità agli standard: i QR code sono supportati da GS1 per le applicazioni nella catena di approvvigionamento e nella vendita al dettaglio, con FNC1 e Identificatori di applicazione che consentono dati strutturati sugli articoli commerciali.

Come creare un QR code

Creare un QR code è un processo di codifica delle informazioni nella matrice di moduli scuri e chiari definita dallo standard QR code. Ad alto livello, questo comporta la decisione dei dati da codificare, la scelta dello schema di codifica appropriato per il proprio settore e caso d'uso, l'applicazione della codifica per la correzione degli errori e il rendering del simbolo grafico con zone di quiete adeguate affinché possa essere scansionato in modo affidabile.

Esistono diversi modi per creare un QR code. Questi includono generatori online gratuiti, l'utilizzo di una libreria esistente come qrcode per Python, e la creazione di un proprio generatore.

Come scansionare un QR code

I QR code vengono scansionati con dispositivi mobili dotati di fotocamera che eseguono software progettato per decodificare la simbologia.

Il software di scansione di codici a barre di Scandit supporta i QR code e oltre 35 altre simbologie, incluse queste funzionalità:

  • Identificazione e decodifica accelerata dei QR code in condizioni ambientali sfavorevoli, a lunghe distanze e con distorsioni non lineari.
  • Estrazione simultanea di dati da più QR code nel campo visivo, con MatrixScan.
  • Supporto per QR code GS1 e una API GS1 Parser per tradurre i componenti dei dati in formati utilizzabili.

Come decodificare un QR code

Se stai sviluppando il tuo metodo di decodifica per i QR code, i passaggi generali sono i seguenti.

Prerequisiti

L'immagine del QR code viene acquisita e memorizzata con una risoluzione sufficientemente elevata da distinguerne i componenti.

Passaggi di decodifica

  1. Converti l'immagine in una rappresentazione binaria utilizzando la sogliatura, dove i pixel vengono impostati a un valore massimo o minimo (solitamente 255 per il bianco e 0 per il nero) in base al fatto che il segmento di immagine corrispondente sia al di sopra o al di sotto di un determinato valore di soglia.
  2. Identifica il pattern di ricerca e la zona di quiete dell'immagine acquisita per distinguere il simbolo QR code dallo sfondo.
  3. Stima l'eventuale distorsione prospettica esaminando il pattern di allineamento.
  4. Determina la modalità di codifica (alfanumerica, numerica, binaria a 8 bit, kanji, ECI) esaminando le informazioni sul formato.
  5. Leggi i bit dalla griglia dati, che viene letta da destra in basso verso sinistra in basso, seguendo un percorso avanti e indietro attraverso ogni colonna.
  6. Decodifica i simboli dai bit e applica il metodo di correzione degli errori (Reed-Solomon).
  7. Traduci il flusso di dati utilizzando uno schema di codifica compreso dalla tua app. Se lo schema del QR code è sconosciuto, hai due opzioni:
  8. Invia i dati grezzi all'app.
  9. Converti i dati in un formato utilizzato dall'applicazione, ad esempio UTF-8.
  10. Invia i risultati all'applicazione per ulteriori elaborazioni o visualizzazioni.

Il Scandit Barcode Scanner SDK implementa questo processo per te e fornisce funzionalità aggiuntive per i casi d'uso reali dei QR code.

L'aggiunta della scansione di QR code alla tua app richiede solo due passaggi dopo aver configurato il software Scandit. Le seguenti istruzioni sono basate sull'applicazione "Barcode Capture Simple Sample" per il Scandit JavaScript Barcode Scanner SDK:

1. Abilita le simbologie richieste, inclusi i QR code

settings.enableSymbologies([
    Symbology.QR,
    Symbology.DataMatrix,
    Symbology.UPCE,
  ]);

2. Dopo che un codice a barre è stato decodificato e riconosciuto dalla libreria Scandit, recupera i suoi dati implementando l'interfaccia listener di Scandit

barcodeCapture.addListener({
    didScan: async (barcodeCaptureMode: BarcodeCapture, session: BarcodeCaptureSession) => {
      // Disable the mode to avoid unwanted scan until the user closes the displayed result.
      await barcodeCapture.setEnabled(false);
      // Hide the viewfinder.
      await barcodeCaptureOverlay.setViewfinder(null);
      const barcode: Barcode | null = session.newlyRecognizedBarcode;
      if (!barcode) {
        return;
      }
      const symbology: SymbologyDescription = new SymbologyDescription(barcode.symbology);
      showResult(`Scanned: ${barcode.data ?? ""}\n(${symbology.readableName})`);
    },
  });

Qui, il metodo estrae:

  • barcode.symbology - simbologia del codice a barre come enumerazione.
  • barcode.data - dati del codice a barre come stringa UTF-8.
  • symbology.readableName - nome leggibile della simbologia.

Come Scandit supporta i codici QR

L'SDK Scandit Barcode Scanner soddisfa le esigenze degli sviluppatori nel mondo reale, incluse queste funzionalità specifiche per i codici QR:

  • Supporto esplicito per codici QR GS1 con gestione FNC1 e analisi AI.
  • Normalizzazione di tutti gli schemi di codifica in UTF-8, se i dati sono convertibili, o accesso ai dati grezzi.
  • Un'API GS1 Parser per normalizzare ed estrarre stringhe di elementi in un formato leggibile senza preoccuparsi della codifica o dei delimitatori. Sono incluse opzioni di ottimizzazione, come la stretta aderenza allo standard GS1 e la sostituzione della lunghezza della stringa dell'Application Identifier.
  • Abilitazione e disabilitazione delle simbologie supportate, inclusi i preset di settore, per migliorare le prestazioni di scansione.
  • Append strutturato supporto per estrarre dati da più simboli. Utilizzando MatrixScan, questo restituisce i dati da più etichette nel campo visivo della fotocamera contemporaneamente.

Il software di Scandit supporta tutti i principali sistemi operativi, linguaggi di programmazione, framework, sistemi di terze parti e dispositivi OEM, tra cui iOS nativo, Android nativo, web/Javascript, React Native, Cordova, Flutter, Kotlin Multiplatform, .NET, Capacitor, Titanium, e Linux/C.

"Abbiamo valutato l'accuratezza di lettura di Scandit. I codici a barre applicati su frutta e verdura non sono sempre piatti e possono essere curvi. Scandit è in grado di leggere con precisione tali codici a barre. Durante la fase di valutazione, abbiamo confrontato altri motori di scansione, ma Scandit era nettamente superiore in termini di accuratezza di lettura."

Prova l'SDK Scandit Barcode Scanner

Valuta la nostra decodifica di codici QR con una prova gratuita di 30 giorni

Domande frequenti


Loading search...

Please wait a moment