Generatore di codici QR

Crea un codice QR e osserva le decisioni dietro: la divisione dei modi, la versione, il livello di correzione, le otto maschere e il costo di un logo.

Contenuto
Che cosa viene davvero codificato
https://seladevtools.com/qr-code-generator
Codice

Versione 3 · 29×29 moduli · livello M · maschera 7

Opzioni
Correzione degli errori
Colori
Logo
Che cosa ha deciso il codificatore
Versione
3 · 29×29 moduli
Livello
M
Maschera
7 (penalità più bassa)
Dati
348 di 352 bit
Parole di codice
44 di dati + 26 di correzione, in 1 blocchi

Segmenti

ModoCaratteriBit
byte42348

Penalità delle maschere

MascheraSequenzeBlocchiSimile al patternEquilibrioTotale
03253511200796
13313752800986
22943452800919
33223451600827
43303301200780
53123481600820
63223513200993
72892731600722

Le quattro regole penalizzano lunghe sequenze di un colore, i blocchi 2×2, la sequenza 1:1:3:1:1 che un lettore scambia per un pattern di ricerca, e una quota di scuri lontana da metà. Vince la più bassa; clicca una riga per forzarla.

Dentro ogni codice QR si nascondono quattro decisioni

Incolli un testo in un generatore di codici QR ed esce un quadrato in bianco e nero. Quello che non ti mostra è che il codificatore ha appena preso per te quattro decisioni distinte, ognuna delle quali cambia il risultato e ognuna delle quali avrebbe potuto essere diversa.

Questo strumento le mostra tutte e quattro, perché sono la parte interessante. Una volta che le vedi, il comportamento che sembrava arbitrario — il codice che salta di taglia quando aggiungi un carattere, un logo che passa su un codice e non sul successivo — smette di esserlo.

  • La divisione dei modi: la norma definisce quattro modi di impacchettare i caratteri, e il tuo testo viene ripartito fra loro.
  • La versione: un numero da 1 a 40 che fissa la griglia fra 21×21 e 177×177 moduli.
  • Il livello di correzione degli errori: L, M, Q o H, che decide quanto del simbolo può essere distrutto restando leggibile.
  • La maschera: uno di otto pattern applicati in XOR sui dati per rompere le forme che confondono un lettore.

Nessuna delle quattro è questione di gusto. Ognuna ha una risposta giusta date le altre, ed è proprio per questo che vale la pena guardarle: interagiscono.

Dividere il testo è un problema di cammino minimo

Il modo numerico spende 10 bit ogni tre cifre. Il modo alfanumerico spende 11 bit ogni due caratteri, presi da un insieme di 45: le cifre, le maiuscole, lo spazio e nove segni di punteggiatura. Il modo byte spende 8 bit per byte UTF-8. Il modo kanji spende 13 bit su un carattere che al modo byte ne costerebbe 24.

Perciò la codifica più economica è raramente un solo modo per tutta la stringa; ma nemmeno cambiare è gratis, dato che ogni segmento paga un indicatore di modo da 4 bit e un campo di conteggio. Se convenga isolare una sequenza di cifre dipende da quanto è lunga. Questo rende la divisione un problema di cammino minimo, e questo codificatore lo risolve in modo esatto invece di indovinare con una regola pratica.

HELLO12345678901234567890

as one alphanumeric segment
  4 + 9 + (11 x 12) + 6 = 151 bits

split at the digits
  4 + 9  + (11 x 2) + 6 =  41 bits
  4 + 10 + (10 x 6) + 7 =  81 bits
  total                 = 122 bits

Ventinove bit, che alla versione 1 sono la differenza fra entrare e non entrare. La tabella dei segmenti nella pagina mostra la divisione che il codificatore ha davvero scelto e quanto è costato ogni segmento, così vedi quali caratteri sono cari.

La versione e la divisione si rincorrono

Ecco la piega che manda in errore un codificatore ingenuo. Il campo di conteggio dei caratteri non ha larghezza fissa. Sono 8 bit per il modo byte nelle versioni da 1 a 9 e 16 bit dalla 10 in su; il numerico passa per 10, 12 e 14 agli stessi confini.

Vuol dire che il costo della divisione dipende dalla versione, e la versione dipende dal costo della divisione. La via d’uscita è accorgersi che i gruppi di versioni sono solo tre: la divisione si calcola una volta per gruppo e vince la versione più piccola in cui una di esse entra.

  • Versioni 1–9: numerico 10 bit, alfanumerico 9, byte 8, kanji 8.
  • Versioni 10–26: numerico 12, alfanumerico 11, byte 16, kanji 10.
  • Versioni 27–40: numerico 14, alfanumerico 13, byte 16, kanji 12.

La maschera si sceglie con quattro regole di penalità

I dati di un codice QR sono quasi casuali, e bianco e nero casuali producono forme che un lettore può scambiare per i pattern strutturali che sta cercando. Il rimedio è applicare uno XOR sull’area dati con un pattern regolare scelto per rompere quelle forme. Sono otto, e il codificatore le prova tutte.

Ogni simbolo mascherato viene valutato con quattro regole della norma, e vince il totale più basso. La tabella nella pagina mostra tutti e otto i punteggi scomposti per regola, e cliccare una riga forza quella maschera per vederne l’effetto.

  • Sequenze: tre punti per cinque moduli adiacenti dello stesso colore in riga o colonna, più uno per ogni modulo oltre.
  • Blocchi: tre punti per ogni area 2×2 di un solo colore.
  • Simile al pattern: quaranta punti per la sequenza 1:1:3:1:1 scuro-chiaro-scuro-chiaro-scuro accanto a quattro moduli chiari — il pattern che somiglia ai quadrati agli angoli.
  • Equilibrio: dieci punti per ogni 5% intero di cui la quota di moduli scuri si allontana dalla metà.

Qui le implementazioni divergono un poco: sul se il pattern 1:1:3:1:1 conti anche a scala maggiore, e sul se le informazioni di formato entrino nel punteggio. Questo codificatore segue la lettura di ZXing, che è quella che gira sulla maggior parte delle fotocamere dei telefoni, ed è fissato contro due implementazioni indipendenti. La divergenza non produce mai un codice non valido; decide soltanto quale fra più maschere perfettamente leggibili viene scelta.

Quanto costa davvero un logo al centro

Tutti ripetono la stessa regola: il livello H recupera il 30%, quindi puoi coprire fino al 30% del codice. È una risposta della forma sbagliata, e seguirla prima o poi ti consegnerà un codice che non si scansiona.

La correzione degli errori di un codice QR non è un unico serbatoio. I dati vengono divisi in blocchi Reed-Solomon, ciascuno con le proprie parole di correzione, e i blocchi sono intrecciati su tutta la griglia perché un graffio danneggi diversi blocchi poco invece che uno molto. Ogni blocco può perdere circa metà delle sue parole di correzione ed essere ricostruito. Un logo al centro è un quadrato pieno, esattamente la forma che l’intreccio è pensato per spalmare — ma non la spalma mai in modo uniforme.

La domanda quindi non è quale quota del simbolo sia coperta, ma quanto ha perso il blocco più colpito. Questa pagina sa a quale parola di codice appartiene ogni modulo e da quale blocco viene ogni parola di codice, quindi può rispondere direttamente: carica un logo e riporta il danno per blocco e il margine rimasto al peggiore.

  • Coprire un pattern di ricerca, uno di sincronizzazione o le informazioni di formato non è una questione di budget: non portano correzione, e un lettore che non li trova non arriva nemmeno alla fase di correzione.
  • Metà delle parole di codice è un limite superiore. Stampa, riflessi, superfici curve e usura attingono allo stesso budget, e un codice esattamente al limite sullo schermo non lo è più su una tazza.
  • Salire al livello H per far entrare un logo più grande ingrandisce il simbolo, e quindi rimpicciolisce ogni modulo a parità di dimensione stampata: a volte è una perdita, non un guadagno.

I formati di payload, e dove mordono

Un codice QR Wi-Fi o una scheda contatto non sono che testo nella forma che i lettori riconoscono. Le forme sono semplici; dove i codici veri si rompono è nelle regole di escaping, e sono guasti silenziosi: il codice si scansiona benissimo e dà la risposta sbagliata.

WIFI:T:WPA;S:Cafe\; Bar;P:p\:ssw\,rd;;

BEGIN:VCARD
VERSION:3.0
N:Lovelace;Ada;;;
FN:Ada Lovelace
ORG:Analytical Engines\, Ltd
END:VCARD

Nel formato Wi-Fi il punto e virgola chiude un campo, quindi una password che ne contiene uno tronca le credenziali se non viene protetto — e lo stesso vale per virgola, due punti, virgolette e barra rovesciata. Un nome di rete fatto solo di cifre esadecimali va messo fra virgolette, altrimenti viene letto come valore esadecimale e non come testo. In vCard i separatori sono il punto e virgola e la virgola, una riga oltre i 75 ottetti va ripiegata su una riga di continuazione che comincia con uno spazio, e il fine riga è CRLF.

I costruttori qui applicano tutto questo e dicono che cosa hanno fatto, invece di riscrivere il tuo input in silenzio. Se sotto i campi compare un avviso, qualcosa nel tuo testo ha avuto bisogno di attenzione — cosa che di solito conviene sapere prima di stampare mille adesivi.

Domande frequenti

Perché aggiungendo un carattere il codice è cresciuto così tanto?
Perché è cambiata la divisione dei modi, la versione, o entrambe. Una sola minuscola in una stringa tutta maiuscola può spingere un intero segmento dal modo alfanumerico al modo byte, che costa otto bit per carattere invece di cinque e mezzo. Passare dalla versione 9 alla 10 allarga inoltre ogni campo di conteggio. La tabella dei segmenti mostra dove sono finiti i bit.
Quale livello di correzione degli errori conviene?
M è il valore predefinito sensato ed è quello che usano la maggior parte dei codici in circolazione. Sali a Q o H quando il codice sarà stampato piccolo, su qualcosa di curvo, su una superficie che si maneggia, o quando copri il centro con un logo. Scendi a L solo se il payload è lungo e il codice si legge da schermo. I livelli più alti non danno affidabilità gratis: ingrandiscono il simbolo a parità di dati, e un simbolo più grande stampato alle stesse dimensioni ha moduli più piccoli.
Quanto può essere grande il logo al centro?
Caricalo e la pagina te lo dirà, perché la risposta onesta dipende dalla versione, dal livello e da dove cadono i blocchi. Quello che non farà è ripetere la regola del 30%, che parla di parole di codice e non di area, e del simbolo intero e non del blocco peggiore. Come punto di partenza, il 15% del lato al livello H di solito sta comodo e il 25% di solito no.
Mettere l’URL in maiuscolo rimpicciolisce davvero il codice?
Spesso sì. Il modo alfanumerico non ha minuscole, quindi un URL minuscolo finisce nel modo byte a otto bit per carattere, mentre uno maiuscolo entra in alfanumerico a cinque e mezzo. Schema e host non distinguono le maiuscole, perciò HTTPS://EXAMPLE.COM funziona esattamente come https://example.com — ma il percorso le distingue e non va toccato. La pagina misura il risparmio sul tuo URL reale e propone il cambio solo quando aiuta.
Il modo kanji conviene per il testo giapponese?
Sì: 13 bit per carattere dove il modo byte in UTF-8 ne spende 24, così il testo giapponese esce quasi della metà. Copre l’intervallo a due byte di Shift_JIS, che comprende i kana, i kanji di JIS X 0208 e anche greco e cirillico. Questa pagina carica la tabella di corrispondenza solo quando il testo non è ASCII puro, quindi un codice che porta un URL non la scarica mai.
Conviene attivare la dichiarazione UTF-8?
Di solito no. La norma dice che il modo byte è ISO-8859-1 se un’intestazione ECI non dice altro, ma in pratica ogni lettore di questo secolo lo tratta come UTF-8, ed è quello che questo codificatore scrive. Dichiararlo esplicitamente costa 12 bit e confonde alcuni lettori industriali datati. Attivalo se punti a un lettore preciso che documenta il supporto ECI.
Perché non ci sono Micro QR né codici in più parti?
Esistono entrambi nella norma ed entrambi ti darebbero qualcosa che non si scansiona. Micro QR è una simbologia a sé con proprie tabelle di capacità, proprio insieme di maschere e propria codifica di formato, e la maggior parte delle app fotocamera non lo legge. Structured Append distribuisce il payload su un massimo di sedici simboli che praticamente nessun lettore di consumo ricompone. Se i tuoi dati non entrano nella versione 40, la risposta è mettere un URL nel codice e i dati dietro.
Quanto piccolo si può stampare un codice QR?
L’indicazione consueta è che un modulo misuri almeno 0,4 mm in stampa e che il codice sia circa un decimo della distanza di lettura diviso la dimensione della versione; ma il vincolo pratico è la zona di silenzio. La norma chiede quattro moduli di margine pulito su tutti i lati, e il guasto più comune nel mondo reale è un codice accostato ad altra grafica. La versione e il numero di moduli mostrati nella pagina sono ciò che serve per quel calcolo.