Correzione d'errore dei codici QR: come funzionano davvero L, M, Q e H

dal team KoloQRBasi

I quattro livelli di correzione d'errore di un codice QR come lettere grandi su tessere arrotondate - Q, M, L e H - sopra un'etichetta arrotondata con la scritta "Error Correction".

La correzione d'errore è la ridondanza integrata in un codice QR che permette a uno scanner di ricostruire i dati quando parte del simbolo è danneggiata o coperta. In un certo senso un codice QR memorizza il suo contenuto due volte: una come dati, e una come informazioni di recupero derivate matematicamente e distribuite su tutto il simbolo. Se una parte del codice è graffiata, sbavata, piegata o nascosta dietro un logo, lo scanner ricostruisce i pezzi mancanti a partire da quelli sopravvissuti.

Punti chiave

  • La correzione d'errore è la ridondanza integrata in un codice QR che permette a uno scanner di ricostruire i dati quando parte del simbolo è danneggiata o coperta.
  • I quattro livelli definiti dalla norma ISO/IEC 18004 recuperano circa il 7% (L), 15% (M), 25% (Q) e 30% (H) dei dati del codice.
  • Una correzione d'errore più alta riduce la capacità di dati, quindi lo stesso URL richiede una versione di simbolo più grande - e a parità di larghezza stampata questo significa moduli più piccoli e una lettura più difficile.
  • La correzione d'errore ripara solo l'area dati. Un danno a un pattern di rilevamento, ai pattern di sincronizzazione o alla zona di silenzio rende di solito il codice illeggibile, qualunque livello sia stato usato.
  • La correzione d'errore non può compensare basso contrasto, sfocatura, riflessi o un codice stampato troppo piccolo, perché questi degradano l'intero simbolo insieme anziché una sua singola zona.

Cos'è la correzione d'errore di un codice QR?

Il meccanismo è la codifica Reed–Solomon, la stessa famiglia di codici usata sui CD e nelle trasmissioni dallo spazio profondo. La codifica Reed–Solomon è lo schema che genera le parole di correzione d'errore di un codice QR e ricostruisce i dati mancanti a partire da quelle rimaste intatte. Lavora su parole di codice, non sui singoli quadratini. Una parola di codice è un gruppo di otto moduli che un codice QR tratta come una singola unità - o una unità di dati, o una unità di correzione d'errore.

La correzione d'errore si sceglie una volta sola, al momento della generazione, e resta fissata nel simbolo. Il livello è scritto nelle informazioni di formato accanto ai pattern di rilevamento, così qualunque scanner può leggere quale livello è stato usato. Il livello di correzione d'errore di un codice QR stampato non si può cambiare dopo: cambiarlo significa rigenerare e ristampare il codice.

Cosa significano i livelli di correzione d'errore L, M, Q e H?

I quattro livelli di correzione d'errore QR recuperano circa il 7% (L), 15% (M), 25% (Q) e 30% (H) delle parole di codice del codice. Ogni codice QR ne usa esattamente uno. I livelli più alti aggiungono più parole di recupero, il che lascia meno parole per i tuoi dati veri e propri a parità di dimensione del simbolo.

LivelloRecupero nominaleByte alla versione 1 (21×21)Byte alla versione 10 (57×57)Uso tipico
L (Low)~7%17271Schermi, app, URL lunghi, superfici pulite al chiuso
M (Medium)~15%14213Il predefinito più comune; lavori di stampa generici
Q (Quartile)~25%11151Piccolo logo centrale, materiale maneggiato o da esterno
H (High)~30%7119Logo più grande, marcatura industriale, abrasione, intemperie
I dati di capacità vengono dalle tabelle di capacità caratteri della norma ISO/IEC 18004, modalità byte.

Le percentuali descrivono parole di codice, non superficie, e sono nominali anziché esatte. La versione 1 rende visibile il conto: il simbolo contiene in tutto 26 parole di codice, e Reed–Solomon può riparare fino a metà delle parole di correzione d'errore di un blocco, meno una piccola riserva che lo standard mette da parte per ridurre il rischio di decodificare dati sbagliati.

Livello (versione 1)Parole datiParole ECParole riparabiliQuota sulle 26 totali
L19728%
M1610415%
Q1313623%
H917831%

Nei simboli più grandi i dati sono divisi in più blocchi Reed–Solomon e le parole di codice sono interlacciate su tutto il simbolo, così una singola macchia si distribuisce su molti blocchi e ogni blocco ripara la propria quota. È l'interlacciamento a spiegare perché un alone di caffè in un angolo è di solito sopravvivibile, e perché la percentuale nominale resta una guida ragionevole anche se la correzione avviene blocco per blocco.

Quale livello di correzione d'errore dovresti usare?

Usa M per la maggior parte dei codici QR stampati, Q o H quando un logo sta sul codice o la superficie subisce maltrattamenti, e L solo sugli schermi o dove il contenuto è lungo e il codice deve restare poco denso. M è il livello predefinito nella maggior parte dei generatori, e per un poster, un volantino, un menù o un biglietto da visita che non verranno graffiati, M è la risposta giusta.

Regole di decisione:

  • Se il codice verrà mostrato su uno schermo, scegli L. Gli schermi non hanno sporco, non si piegano e hanno un contrasto perfetto, quindi la capacità di recupero è ridondanza sprecata che rende solo il codice più denso.
  • Se il codice è stampato su carta e non porta un logo, scegli M. M copre il normale maneggiamento, l'allargamento dell'inchiostro e le sbavature leggere.
  • Se il codice porta un logo centrale, scegli Q come minimo, e H se il logo è grande. Il logo consuma capacità di recupero che altrimenti assorbirebbe gli errori di stampa e di scansione.
  • Se il codice va all'aperto, su una confezione, su un macchinario, o ovunque venga sfregato, piegato o esposto alle intemperie, scegli H. L'abrasione rimuove moduli in modo permanente.
  • Se il contenuto è lungo e il codice deve restare fisicamente piccolo, scegli L o M e accorcia piuttosto il contenuto. Alzare il livello su un URL lungo impone un simbolo più denso, che di solito è il rischio maggiore.

Qui torna utile un controesempio concreto. Il QR-bill svizzero, lo standard nazionale di pagamento per Svizzera e Liechtenstein, prescrive il livello di correzione d'errore M, un simbolo fisso di 46 × 46 mm, una dimensione minima del modulo di 0,4 mm e una croce svizzera di 7 × 7 mm al centro del codice. Quella croce copre circa il 2,3% dell'area del simbolo. Uno standard bancario nazionale mette un logo su un codice QR al livello M - perché il logo è piccolo e la dimensione del modulo è garantita. Il livello H non è un requisito per avere un logo; è la compensazione per averne uno grande.

Come la correzione d'errore cambia la dimensione di un codice QR stampato

Alzare il livello di correzione d'errore rimpicciolisce ogni modulo a parità di larghezza stampata, perché gli stessi dati richiedono una versione di simbolo più alta, con più moduli per lato. È il compromesso che quasi tutti si perdono: il livello che protegge dai danni aumenta anche la densità che causa gli errori di lettura in partenza.

Prendi un URL di 44 caratteri come https://koloqr.com/qr-codes-for/coffee-shops, codificato in modalità byte e stampato a 25 mm di larghezza:

LivelloVersione del simboloGrigliaLarghezza del modulo a 25 mmLarghezza minima del simbolo con moduli da 0,4 mm
L329 × 290,86 mm11,6 mm
M433 × 330,76 mm13,2 mm
Q433 × 330,76 mm13,2 mm
H537 × 370,68 mm14,8 mm

Da quella tabella escono due cose. Primo, passare da L a H rimpicciolisce ogni modulo di circa il 21% a parità di dimensione stampata - su carta assorbente è la differenza tra moduli nitidi e moduli che sbavano l'uno dentro l'altro. Secondo, per questo contenuto M e Q producono la stessa identica versione di simbolo, il che vuol dire che Q è gratis: stesso codice fisico, stessa dimensione dei moduli, 25% di recupero invece del 15%.

Controlla ogni volta questo secondo punto. Poiché la capacità si muove a scalini, salire di un livello di correzione d'errore spesso non costa nulla. Genera il codice al livello che hai scelto, annota la dimensione della griglia, generalo un livello più in alto e confronta. Se la griglia non cambia, prendi il livello più alto.

Un logo centrale che copre fino a circa il 20% dell'area di un codice QR è recuperabile in modo affidabile al livello H nella maggior parte dei flussi di stampa. Il tetto teorico a H è vicino al 30%, ma spendere tutto il budget di recupero sul logo non lascia nulla per l'allargamento dell'inchiostro, i riflessi, un'impronta o una fotocamera leggermente fuori fuoco - e quegli errori attingono allo stesso budget.

Una regola pratica facile da verificare: un logo circolare il cui diametro è metà della larghezza del codice QR copre circa il 20% dell'area del simbolo. Un logo quadrato di lato pari a 0,45 × la larghezza del codice copre più o meno lo stesso. Resta entro quei valori e il livello H terrà in riserva circa un terzo della sua capacità.

Regole che contano più della percentuale:

  • Tieni il logo al centro. Un logo centrato distribuisce il proprio danno in modo uniforme sui blocchi Reed–Solomon interlacciati. Un logo decentrato della stessa dimensione concentra il danno ed è più probabile che esaurisca un blocco.
  • Non lasciare mai che il logo tocchi i tre pattern di rilevamento. Quei grandi quadrati negli angoli sono ciò che permette a uno scanner di localizzare il codice, e non hanno alcuna correzione d'errore.
  • Dai al logo uno sfondo pieno. Un logo posato direttamente sui moduli con sfondo trasparente crea mezzi moduli ambigui lungo il bordo, e produce errori che il decodificatore deve comunque pagare con la sua capacità.
  • Dalla versione 7 in su, occhio ai pattern di allineamento. Dalla versione 7 in poi i pattern di allineamento stanno dentro l'area dati, anche vicino al centro. Un logo centrale grande può seppellirne uno: di solito il codice si legge ancora frontalmente, ma può fallire di sbieco o su una superficie curva.
  • Testa il codice stampato, non l'anteprima a schermo. Un logo che funziona al 400% di zoom su un monitor può fallire a 25 mm su carta non patinata.

KoloQR, un generatore di codici QR gratuito con codici QR circolari e di forma personalizzata, supporta l'inserimento del logo e ti lascia impostare il livello di correzione d'errore prima dell'esportazione. Le forme decorative dei moduli - punti arrotondati, moduli circolari - riducono l'area di inchiostro stampata di ogni modulo, quindi consumano parte della stessa tolleranza che la correzione d'errore è lì a fornire. Lo stile non migliora mai le prestazioni di lettura; è la correzione d'errore ad assorbire la differenza. Guarda i codici QR brandizzati per vedere com'è in pratica.

Quali parti di un codice QR la correzione d'errore non può riparare

La correzione d'errore protegge solo l'area dati. I pattern strutturali di cui uno scanner ha bisogno prima di poter decodificare qualsiasi cosa non sono coperti dalla correzione Reed–Solomon, quindi un danno lì è di solito fatale, che il codice sia stato generato a L o a H.

  • Pattern di rilevamento. I tre quadrati concentrici negli angoli in alto a sinistra, in alto a destra e in basso a sinistra dicono allo scanner dov'è il simbolo e come è ruotato. Nessuna ridondanza li protegge. Coprirne uno di solito significa che il codice non viene mai individuato.
  • Zona di silenzio. La zona di silenzio è il margine vuoto di quattro moduli attorno a un codice QR che permette a uno scanner di rilevare dove il simbolo inizia e finisce. Un testo, un bordo o una fotografia spinti dentro quel margine rompono il rilevamento mentre ogni modulo dentro il codice è ancora perfetto.
  • Pattern di sincronizzazione. Le linee alternate di un modulo che corrono tra i pattern di rilevamento fissano la griglia dei moduli. Un danno qui disallinea l'intera lettura.
  • Pattern di allineamento. Presenti dalla versione 2 in su, correggono la distorsione prospettica. Perderne uno è spesso sopravvivibile su una scansione piana e frontale, molto meno su una bottiglia curva o un'insegna inclinata.

Le informazioni di formato sono l'eccezione. La striscia di moduli accanto ai pattern di rilevamento che registra il livello di correzione d'errore e il pattern di maschera è a sua volta protetta da un codice BCH e memorizzata due volte nel simbolo, quindi da sola sopravvive a una discreta quantità di danno.

Da cosa la correzione d'errore non protegge

La correzione d'errore ripara il danno localizzato, non il degrado globale. Alzare il livello da M a H non fa nulla per un codice troppo piccolo, troppo pallido, sfocato o male illuminato - quei problemi colpiscono tutti i moduli insieme, e non resta nessuna zona intatta da cui il decodificatore possa ricostruire.

Guasti che un livello di correzione d'errore più alto non risolverà:

  • Un codice stampato troppo piccolo per i suoi dati. Sotto circa 0,4 mm per modulo in stampa, le fotocamere dei telefoni faticano a risolvere la griglia. Alzare il livello rimpicciolisce i moduli e peggiora il problema.
  • Contrasto basso. Uno scanner ha bisogno di una netta distinzione chiaro/scuro. Un codice grigio pallido su sfondo crema fallisce a ogni livello.
  • Colori invertiti. I moduli chiari su sfondo scuro non sono supportati ovunque; diverse app di scansione e fotocamere native si aspettano scuro su chiaro.
  • Riflessi e plastificazione. La plastificazione lucida sotto un faretto riflette dentro la fotocamera e cancella l'intero simbolo.
  • Micromosso e poca luce. Entrambi degradano tutta l'immagine, non un suo angolo.
  • Un URL di destinazione sbagliato o morto. La correzione d'errore garantisce che lo scanner legga correttamente la stringa codificata. Non dice nulla su se quell'indirizzo risponda ancora.

Quando un codice fallisce a intermittenza sul campo e la copia stampata sembra pulita, la causa è quasi sempre la dimensione dei moduli, il contrasto o l'illuminazione - non il livello di correzione d'errore.

Correzione d'errore su schermo e in stampa

Su uno schermo il livello L è di solito la scelta migliore; in stampa M è la soglia sensata. Un codice QR su un display non affronta nessuno dei rischi fisici per cui la correzione d'errore esiste - niente allargamento dell'inchiostro, niente pieghe, niente abrasione, niente sporco - quindi la capacità di recupero non compra nulla e i moduli in più rendono il codice più denso del necessario.

Considerazioni specifiche per lo schermo: un codice mostrato su un telefono e scansionato da un altro telefono compete con i riflessi e la luminosità del display, cosa che una correzione d'errore più alta non affronta. Aumenta piuttosto la dimensione mostrata e la luminosità dello schermo.

Considerazioni specifiche per la stampa: la carta assorbente allarga l'inchiostro, e ogni modulo cresce leggermente dentro i suoi vicini. Quell'allargamento del punto è una fonte reale di errori ed è esattamente ciò che i livelli M e Q assorbono. La carta patinata allarga meno; carta da giornale, carta kraft e tessuto allargano di più. Esporta in SVG anziché in un PNG ingrandito, così i moduli restano geometricamente esatti alla risoluzione della stampante - KoloQR esporta sia PNG sia SVG.

Come testare quanti danni regge davvero il tuo codice QR

Testa il codice stampato reale invece di fidarti della percentuale nominale - il livello ti dice il budget, la tiratura ti dice quanto ne era già stato speso. La procedura qui sotto richiede una quindicina di minuti e ti dà un numero su cui puoi contare.

  1. Genera il codice con le impostazioni definitive. Stesso contenuto, stesso livello di correzione d'errore, stesso logo, esportato in SVG.
  2. Stampa con le impostazioni e sul supporto della produzione. Stessa stampante, stessa carta, stessa plastificazione. Una prova laser su carta da ufficio non predice come si comporterà il cartoncino non patinato.
  3. Scansiona la stampa integra alla distanza prevista con due telefoni. Uno iOS e uno Android, con la fotocamera nativa. Se fallisce già qui, fermati e sistema dimensione o contrasto prima di testare i danni.
  4. Copri con nastro opaco il 10% dell'area del simbolo al centro. Per un codice da 25 mm, un quadrato di 8 × 8 mm si avvicina al 10%. Scansiona di nuovo.
  5. Aumenta l'area coperta a passi del 5% finché il codice non si legge più. Annota l'ultima percentuale che ha funzionato - quella è la tua tolleranza reale.
  6. Ripeti con il danno posto su un bordo e su un angolo. Evitando i pattern di rilevamento. Il danno sul bordo cede spesso prima di quello al centro.
  7. Ripeti sotto l'illuminazione reale. Il negozio, il ristorante di sera, la corsia del magazzino.
  8. Confronta il risultato con il livello nominale. Se un codice al livello H fallisce al 12% di copertura, il budget restante è stato consumato dalla qualità di stampa. Ingrandisci il codice, accorcia l'URL, oppure passa a una superficie meno assorbente.

Annota il numero. È il dato più utile da avere prima di impegnarsi in una tiratura.

Errori comuni nella scelta di un livello di correzione d'errore

L'errore più comune sulla correzione d'errore è scegliere H per default, dando per scontato che più protezione sia sempre più sicura. Su un URL lungo a una dimensione di stampa piccola, H produce un codice più denso che fallisce più spesso della versione M che ha sostituito.

Da farePerché
Accorcia l'URL prima di alzare il livelloMeno caratteri significano una versione di simbolo più bassa, moduli più grandi e più tolleranza reale di quanta ne dia qualsiasi cambio di livello
Verifica se il livello successivo cambia la dimensione della grigliaLa capacità si muove a scalini, quindi salire di un livello è spesso gratis
Usa H per i codici da esterno, industriali e da confezioneAbrasione e intemperie rimuovono moduli in modo permanente, ed è esattamente a questo che serve la capacità di recupero
Testa la copia stampata applicando un dannoLa percentuale nominale è un tetto, non una garanzia
Da evitarePerché
Usare H per compensare un codice piccoloI moduli più piccoli causano più errori di quanti la correzione d'errore ne ripari
Riempire con il logo tutto il budget di recuperoGli errori di stampa, i riflessi e la messa a fuoco attingono allo stesso budget e non resta più nulla
Dare per scontato che H protegga i pattern di rilevamentoNessun livello di correzione d'errore li protegge; un pattern di rilevamento coperto significa nessun rilevamento
Contare sulla correzione d'errore per sopravvivere a una zona di silenzio mancanteIl rilevamento fallisce prima che inizi la decodifica, quindi la capacità di recupero non viene mai usata
Alzare il livello dopo che un codice ha fallito sul campoDiagnostica prima contrasto, dimensione e illuminazione; il livello è raramente la causa

Questions? Answered

Usa Q come minimo, e H se il logo copre più di circa il 15% del codice. Tieni il logo centrato, su uno sfondo pieno, ed entro circa il 20% dell'area del simbolo al livello H. Così resta capacità di recupero per gli errori di stampa e di fotocamera, che attingono allo stesso budget del logo.

Non sempre. I livelli più alti assorbono più danni ma riducono la capacità di dati, quindi lo stesso contenuto richiede una versione di simbolo più grande e moduli più piccoli a parità di larghezza stampata. Per un URL lungo su un codice stampato piccolo, il livello M si legge spesso in modo più affidabile del livello H.

No. Il livello è codificato nelle informazioni di formato del simbolo e determina come è costruito l'intero codice, quindi non si può modificare dopo. Rigenera il codice con il nuovo livello e ristampalo. Se deve cambiare anche la destinazione, quello è un problema a parte - i codici statici puntano a un URL fisso.

Lo scanner segnala normalmente una lettura fallita anziché restituire dati sbagliati. I codici QR riservano un piccolo numero di parole di protezione dalla decodifica errata nelle dimensioni di simbolo più piccole, proprio per abbassare la probabilità che un codice corrotto si decodifichi in un valore plausibile ma sbagliato.

No. I tre pattern di rilevamento, i pattern di sincronizzazione e la zona di silenzio non hanno alcuna correzione d'errore. Uno scanner ne ha bisogno per localizzare e allineare il simbolo prima che inizi la decodifica, quindi coprirne uno significa di solito che il codice non viene mai individuato - anche al livello H e con un'area dati per il resto perfetta.

La causa consueta è la dimensione dei moduli o il contrasto, non il danno. Il livello H riduce la capacità di dati, quindi il simbolo si fa più denso a parità di larghezza stampata. Misura un modulo: sotto circa 0,4 mm in stampa le fotocamere dei telefoni faticano, qualunque sia il livello. Ingrandisci il codice o accorcia l'URL.

La maggior parte dei generatori usa per default il livello M, che recupera circa il 15%. Il valore predefinito è un compromesso ragionevole per la stampa, ma vale la pena controllarlo invece di darlo per scontato - alcuni strumenti partono da L, e altri alzano il livello in silenzio quando aggiungi un logo, il che cambia la versione del simbolo e la densità stampata.

Appena. I livelli più alti aggiungono moduli, quindi la fotocamera risolve una griglia leggermente più densa e il decodificatore esegue un passaggio Reed-Solomon leggermente più lungo, ma sull'hardware dei telefoni moderni la differenza non è percepibile. La velocità di scansione dipende molto di più da illuminazione, distanza di messa a fuoco e dimensione dei moduli.

No. Le parole di correzione d'errore sono derivate matematicamente dal contenuto e non portano informazione propria. Tutto ciò che sembra aggiungere uno strato nascosto - una forma, un colore, una sovrapposizione artistica - è decorazione che consuma capacità di recupero, non un secondo canale di dati.

Perché KoloQR?

  • Crea codici QR per siti web, menù, Wi-Fi, PDF e biglietti da visita
  • Personalizza colori, loghi e forme uniche
  • Scarica file PNG e SVG di alta qualità
  • Pensato sia per la stampa che per il digitale
Genera codice QR
Un semplice codice QR nero accanto allo stesso codice ridisegnato come un cerchio con i colori del brand