# Lettore di QR code e codici a barre — leggere un QR code da un'immagine o dalla fotocamera

Punta la fotocamera, o trascina qui una foto. Si legge qui, e da nessun'altra parte.

> Leggi un QR code da una foto, uno screenshot o dalla fotocamera, e guarda esattamente dove porta il link prima di aprirlo. Anche EAN, UPC, Code 128, Code 39 e ITF. Non viene caricato niente.

Questa pagina è uno strumento interattivo che funziona interamente nel tuo browser, all'indirizzo https://abox.tools/it/leggere-qr-code/ — nulla di ciò che gli affidi viene caricato. Quanto segue è tutto ciò che la pagina dice dello strumento a parole; per usarlo, apri l'indirizzo.

## Qui non si caricano le immagini e i codici che ci sono dentro, **mai**. Non c'è nessun server.

Leggere un codice è aritmetica sui pixel, e i pixel sono già qui. Trovare il simbolo, correggere l'angolo, togliere la maschera, riparare i danni con Reed-Solomon e rileggere i bit: tutto questo succede in un paio di migliaia di righe di JavaScript dentro questa pagina, che puoi leggere. **La fotocamera è la stessa promessa, non un'eccezione:** un fotogramma arriva come pixel dentro questa scheda, viene esaminato e sparisce. Non viene registrato niente, non viene conservato niente, e questa pagina non ha nessuna funzione di rete con cui mandarlo via.

- ✗ Nessun caricamento
- ✗ Nessun account
- ✗ Non registra niente
- ✓ Funziona offline
- ✓ Codice aperto

## Come leggere un QR code senza caricare l'immagine

1. **Dagli l'immagine.** Trascina una foto o uno screenshot sul riquadro, incollane una direttamente, oppure premi il bottone della fotocamera. Più di una alla volta va benissimo: ognuna viene letta per conto suo e ognuna ha la sua risposta. Uno screenshot di un codice che è già sul tuo schermo è la strada più veloce e la più affidabile, perché lì non ci sono di mezzo né obiettivo, né angolo, né luce.
2. **Fai entrare tutto il simbolo, margine compreso.** Il bianco intorno a un codice fa parte del codice: è così che un lettore capisce dove finisce il simbolo. Una foto ritagliata fino al bordo dei quadratini è di gran lunga il motivo più comune per cui uno non si legge. Riempire più o meno metà dell'inquadratura con il codice è giusto; più vicino di così e gli angoli escono dalla foto.
3. **Leggi l'indirizzo prima di decidere qualsiasi cosa.** Il senso di leggere un codice su un manifesto, su un parchimetro o su una lettera è scoprire dove porta, e quella è proprio l'unica cosa che la fotocamera del telefono non ti lascia davvero fare. Qui l'host sta su una riga tutta sua. Se non è un nome che ti aspettavi, hai già quello per cui eri venuto e non resta niente da aprire.
4. **Prendi sul serio gli avvisi, soprattutto quelli sommessi.** Un indirizzo `http://` e basta, un nome in un alfabeto che non è quello che sembra, un accorciatore di link, o qualsiasi cosa prima di una `@` nell'indirizzo: ognuno viene nominato dove compare. Nessuno di loro dimostra niente da solo. Tutti valgono dieci secondi prima di andarci.
5. **Se non si legge, cambia la luce prima di cambiare altro.** Quasi tutti i fallimenti sono un problema di soglia: un riflesso che taglia il centro, un'ombra su un angolo, o uno schermo fotografato da un'angolazione che prende la retroilluminazione. Spostati in modo che il riflesso non cada sul codice, oppure accendi la luce della fotocamera. Se non basta, fai una foto piatta e frontale e trascina quella: un'immagine ferma riceve una ricerca molto più accurata di quanta ne possa ricevere un fotogramma dal vivo.
6. **Se la risposta ti sembra strana, guarda l'immagine campionata.** Apri «come è stato letto questo» e guarda la griglietta. È quello che questa pagina ha creduto fosse il codice, ridisegnato a partire dai moduli campionati. Un lettore che ha letto male un simbolo e l'ha riparato fino a farne qualcosa di plausibile lo mostra lì, e da nessun'altra parte.

## La versione lunga

[Come creare un codice QR e provare che si legge](https://abox.tools/it/guide/creare-un-codice-qr-e-provare-che-si-legge/): Genera il codice, poi verificalo con il lettore dello stesso sito: il contenuto esatto, il vero link, a misura di stampa e da una foto, prima della tiratura. Tutto nel browser, niente caricato.

## Anche nella cassetta

- [Hash e checksum](https://abox.tools/it/verificare-checksum/): Controlla un download contro il numero pubblicato da chi lo distribuisce, senza mandarlo a nessuno.
- [Generatore di password e passphrase](https://abox.tools/it/generatore-password/): Generate qui, dal tuo browser, e non spedite da nessuna parte. Non viene salvato niente e non c'è cronologia.
- [Formattatore JSON](https://abox.tools/it/formattare-json/): JSON, XML, HTML, CSS e YAML, formattati o convertiti. Niente finisce incollato nel server di qualcun altro.
- [Convertitore da YAML a JSON](https://abox.tools/it/convertire-yaml-in-json/): Tutte e due le direzioni, e ti dice quanto costa ciascuna. Niente di tutto questo finisce incollato nel server di qualcun altro.

## Domande

### L'immagine viene caricata da qualche parte?

No, e nemmeno quello che ci viene letto dentro. L'immagine viene decodificata su un canvas di questa pagina e letta lì, da JavaScript servito da questo sito. Questo strumento non ha nessuna funzione di rete — non va mai a prendere niente e non manda mai niente — e la `Content-Security-Policy` della pagina elenca ogni indirizzo che può contattare, e nessuno di quelli è nostro. La prova più semplice è staccare la connessione: continua a funzionare.

### La fotocamera registra qualcosa?

No. Un fotogramma arriva come pixel dentro questa scheda, viene disegnato su un canvas, esaminato e sovrascritto dal successivo un decimo di secondo dopo. Non viene scritto niente su disco e non resta niente. Il flusso si ferma appena premi ferma, quando la scheda passa in secondo piano e quando lasci la pagina — e la spia della tua fotocamera è l'indicatore di cui fidarti, perché nessuna pagina può spegnerla.

### Perché mi fa vedere il link invece di aprirlo?

Perché è quella la parte utile. Un QR code è un indirizzo che non puoi leggere, ed è per questo che un adesivo sul codice di un parchimetro funziona: quando sai dove portava, ci sei già. Qui la stringa è stampata per intero, l'host è tirato fuori su una riga sua, e aprirlo è un bottone a parte che premi dopo averla letta. È un clic in più, ed è il clic di cui questo formato ha sempre avuto bisogno.

### Che cosa sa leggere?

QR code di tutte le versioni, dalla 1 alla 40, a tutti e quattro i livelli di correzione d'errore, in modalità numerica, alfanumerica, byte e kanji, segnalando i set di caratteri ECI e i simboli di un gruppo concatenato invece di buttarli via in silenzio. Sul lato a barre: EAN-13, EAN-8, UPC-A, UPC-E, ITF-14, Interleaved 2 of 5, Code 128 e Code 39. Non legge Data Matrix, PDF417, Aztec né MaxiCode.

### Non mi legge il codice. Cosa c'è che non va?

Nove volte su dieci è una di tre cose. Il margine bianco è tagliato via, e un lettore lo usa per capire dove finisce il simbolo. C'è un riflesso o un'ombra su una parte del codice, così nessuna soglia separa i quadratini scuri da quelli chiari. Oppure il codice è così piccolo nell'inquadratura che i suoi moduli non arrivano a due pixel. Cambia la luce, riempi circa metà inquadratura e scatta di fronte invece che di sbieco.

### Riesce a leggere un codice rovinato o coperto in parte?

Spesso sì, ed è il formato che funziona come è stato progettato, non una bravura di qui. Ogni QR code porta con sé dati di controllo Reed-Solomon, e un simbolo fatto al livello H può perdere circa il 30% dei suoi moduli ed essere comunque ricostruito esatto. La pagina dice quante parole di codice ha dovuto riparare sotto «come è stato letto questo», così vedi quanto è andata vicina. Quello che non fa è tirare a indovinare: un simbolo rovinato oltre quello che il controllo regge viene segnalato come illeggibile invece che risposto male.

### Perché dice che non può dirmi dove porta un link bit.ly?

Perché scoprirlo vorrebbe dire chiederlo a bit.ly, e quella è una richiesta di rete. Tutto il resto di quello che questa pagina sostiene si regge sul fatto che qui non c'è codice che contatti niente, e fare un'eccezione in sordina varrebbe meno della risposta. Quindi l'accorciatore viene nominato e quello che nasconde resta onestamente sconosciuto. Se vuoi risolverlo, incollalo in qualcosa che sia disposto a chiedere.

### È sicuro leggere un QR code?

Leggerlo è sicuro. Dargli retta è il rischio, ed è un rischio vero: i codici attaccati sopra a quello buono sui parchimetri, sui tavoli dei ristoranti e sugli avvisi dei corrieri sono ormai abbastanza comuni da avere un nome. Quello che li fa funzionare è che nessuno può leggere un codice guardandolo. Leggerlo senza aprirlo — che è quello che fa questa pagina — toglie tutto quel vantaggio, e i dieci secondi che ci vogliono per guardare l'host sono l'intera difesa.

### Cos'è la griglietta sotto ogni risultato?

I moduli che questa pagina ha campionato davvero dalla tua immagine, ridisegnati a un quadratino per modulo. Sta lì perché la lettura si possa controllare a occhio invece che crederci: se quella griglia somiglia al codice che hai fotografato, la risposta sopra è uscita dai pixel giusti. Quasi nessun lettore te lo fa vedere, ed è la differenza fra uno strumento che puoi controllare e uno a cui devi credere.

### Legge più codici in una stessa immagine?

Uno per immagine, per ora. Trascinane più di una alla volta e ognuna viene letta per conto suo, e la fotocamera legge codice dopo codice mentre la muovi, tenendo ogni nuovo che non ha già visto. Una singola fotografia con dentro un foglio pieno di codici è un lavoro da ritaglio, o da fotocamera puntata su uno alla volta.

### Perché chiama il mio codice a barre in un modo diverso da quello che avevo chiesto?

Perché un codice a barre non si porta dietro il proprio nome. UPC-A è un EAN-13 la cui prima cifra è uno zero, ITF-14 è Interleaved 2 of 5 con quattordici cifre e una cifra di controllo valida, e Code 128 nella sua modalità numerica non somiglia a nient'altro. Quello che questa pagina riporta è ciò che dicono le barre più ciò che conferma la cifra di controllo, che è tutto quello che il simbolo stesso sa.

### Funziona offline?

Sì. Carica la pagina una volta, poi stacca la connessione e continua a funzionare, fotocamera compresa. È anche il modo più semplice di dimostrare che non viene caricato niente: un lettore che mandasse via la tua immagine per farla decodificare si fermerebbe nel momento in cui stacchi la spina.

## Come si verifica quello che promette

- **L'immagine non viene mai caricata, e la fotocamera non fa eccezione.** Una foto che trascini qui viene decodificata su un canvas di questa pagina e letta lì. Un fotogramma della fotocamera è la stessa cosa che arriva trenta volte al secondo: viene disegnato su quel canvas, esaminato e sovrascritto dal successivo. Non ne viene registrato nessuno, non ne resta nessuno, e la spia della fotocamera che si spegne quando premi ferma è tutto quello che c'è.
- **Qui non c'è niente che vada a prendere niente.** Non c'è nessun `fetch`, nessun `XMLHttpRequest` e nessun `sendBeacon` da nessuna parte in `src/`, e la `Content-Security-Policy` della pagina non lascia nessun indirizzo a cui questa origine potrebbe mandare qualcosa, anche se ci fosse. È per questo che questa pagina non può dirti dove va a finire un link accorciato: scoprirlo vorrebbe dire chiedere, e lei non chiede.
- **Ti fa vedere l'indirizzo. Non lo apre mai.** Un QR code stampato è un indirizzo che nessuno può leggere, ed è esattamente questo che rende conveniente a qualcuno attaccarci sopra un adesivo. Qui non si apre niente. La stringa intera è stampata perché tu la guardi, l'host a cui arriveresti davvero è tirato fuori a parte, e i trucchi che fanno sembrare un indirizzo un altro — un nome utente davanti a una `@`, un nome scritto in un alfabeto le cui lettere hanno la forma delle nostre, un reindirizzamento — vengono nominati dove compaiono.
- **Ti fa vedere anche che cosa ha campionato.** Sotto ogni risultato QR c'è un'immagine dei moduli che questa pagina ha letto davvero dalla tua fotografia. Se somiglia al codice che hai inquadrato, la risposta sopra sta in piedi; se somiglia a un disturbo, no. Un lettore che ti dà una stringa e basta non si può controllare così.
- **Che cosa carica Google, e che cosa non gli viene dato.** Gli script pubblicitari e di misurazione arrivano da Google, e il bottone per le donazioni da Buy Me a Coffee. A nessuno di loro viene dato un'immagine, un fotogramma o qualcosa letto lì dentro. Ogni riga che trasforma pixel in una stringa è servita da questa stessa origine ed è nel repository.
- **Funziona offline.** Stacca la rete e lo strumento non cambia, fotocamera compresa, perché un passaggio in rete non c'è mai stato. È la prova più semplice di tutte.

**Verifica tu stesso.** Niente di quanto sopra va preso per buono. Questa pagina la genera, dai modelli e dalla configurazione del repository, uno script di build che puoi leggere ed eseguire anche tu, e il risultato finisce sul branch `dist`: puoi quindi confrontare quello che viene servito con quello che produce una build dei sorgenti. https://github.com/A-Box-of-Tools/website

I file da leggere per primi sono `config/site.toml` per la Content-Security-Policy, `src/binarize.js` e `src/detect.js` per trovare un simbolo dentro una fotografia — la soglia, i pattern di ricerca e la correzione della prospettiva —, `src/qr-decode.js` per rileggerlo, `src/reed-solomon.js` per riparare quello che è stato letto male, `src/linear.js` per quelli a barre e `src/camera.js`, che è ogni riga di questa pagina che tocca una fotocamera.
