Corpus di test pubblico
Le nostre affermazioni di compatibilità degli scanner valgono solo quanto le prove su cui si basano. Questa pagina è il corpus, gli input che sottoponiamo a test di regressione per le nostre famiglie di encoder, più il comportamento della fotocamera del telefono che puoi verificare tu stesso senza fidarti della nostra parola.
Scarica corpus.zip Fixture JSON + CSV + metodologia + README. ~4 KB.
Caricamento versione…
Come usare il corpus
Ogni vettore di test è in /test-vectors/fixtures.json. Un oggetto JSON per tipo con i campi di input e le sottostringhe decodificate attese. Recuperato in tempo reale da questo sito, nessuna copia obsoleta.
Prendi il map fields di qualsiasi fixture, inserisci i valori nel generatore per quel tipo e clicca Genera. Il QR risultante è bit per bit identico a quello che il nostro CI elabora in andata e ritorno.
Punta una fotocamera iPhone, fotocamera Android, Google Lens, scanner industriale (Zebra, Honeywell, Datalogic) o lettore specifico dell'app (app bancaria, autenticatore) sul QR generato. Conferma che il testo decodificato contiene ogni sottostringa expect di quel fixture.
Se uno scanner della tua flotta restituisce una decodifica che non corrisponde al fixture, apri un issue. Riprodurremo, aggiungeremo il tuo scanner alla matrice di compatibilità pubblica e (se è un bug dell'encoder) invieremo una correzione.
Risultati di scansione attesi
Renderizzati dallo stesso set di dati della matrice di compatibilità e della riga "Scansiona su" di ogni pagina tipo, quindi le tre cose non possono essere in disaccordo. Il file completo dei fixture su /test-vectors/ ha 33 voci, una per ogni famiglia di encoder che sottoponiamo a test di regressione; non è una riga per tipo di prodotto, e non affermiamo che lo sia.
| Tipo | Input del fixture | iPhone Camera | Android Camera | Scanner pro |
|---|---|---|---|---|
| URL | https://example.com/test | Apre il linkA1 | Apre il linkA5 | DecodificaA8 |
| WiFi | WIFI:S:MyNet;T:WPA;P:...;; | Si connette alla reteA1 | Si connette alla reteA5 | Decodifica il payloadA8 |
| WiFi Enterprise (EAP) | WPA2-EAP PEAP identity=alice@corp | iOS 17+, segnalatoU | Decodifica; la connessione dipende dal produttoreU | Decodifica il payloadQ |
| vCard | FN=Alice ORG=Acme ... | Aggiungi a ContattiA1 | Aggiungi a ContattiA5 | Decodifica il payloadA8 |
| TOTP | otpauth://totp/...?secret=JBSW... | L'app autenticatore lo leggeA9, A10 | L'app autenticatore lo leggeA9, A10 | Decodifica l'URIA8 |
| eSIM | LPA:1$rsp.example.com$K2-LM... | iOS 17.4+ la attivaA4 | Android 13+ la attivaU | Decodifica l'URIQ |
| Bitcoin (BIP-21) | bitcoin:1A1zP1eP... | Si apre l'app portafoglioQ | Si apre l'app portafoglioQ | Decodifica l'URIQ |
| SEPA (EPC) | BCD header + name + IBAN + amount | Solo stringa grezzaQ | Solo stringa grezzaQ | Decodifica la stringa grezzaQ |
| Swiss QR-bill | SPC header + IBAN + address + amount | Solo stringa grezzaQ | Solo stringa grezzaQ | Decodifica la stringa grezzaQ |
| Micro QR | Compact payload | Nessuna decodificaV, U | Nessuna decodificaG | Lettori industrialiZ |
| rMQR | Rectangular payload | Nessuna decodificaU | Nessuna decodificaG | Firmware più recenti Zebra, Scandit e CognexZ |
| GS1 Digital Link | https://id.gs1.org/01/09506000134352 | Apre l'URLQ | Apre l'URLQ | Il firmware POS analizza gli AIQ |
| Aztec | Arbitrary payload | Nessuna decodificaA2 | Google Lens, alcune variantiA7 | NativoA8 |
| Data Matrix | Arbitrary payload | Nessuna decodificaA2 | Google LensA6 | NativoA8 |
| PDF417 | AAMVA or arbitrary | Nessuna decodificaA2 | Google Lens, incostanteA7 | NativoA8 |
| AAMVA driver license | @\n\x1e\rANSI 636014100002DL... | iOS 17+, flusso compatibile con le patentiA3 | Solo app compatibili con le patentiU | NativoA8 |
| EAN-13 / UPC-A | 0012345678905 | Nessuna decodificaAp | Google LensG | Ogni POS retailA8 |
| Code 128 | ABC-123 | Nessuna decodificaAp | Google LensG | NativoA8 |
Come leggere i simboli
- ✓: lo legge dall'app fotocamera di serie, nessuna app aggiuntiva necessaria
- ~: lo legge a una condizione indicata nella cella (un'app specifica, una versione del SO o una modalità)
- ✗: non lo decodifica; serve un'app scanner o hardware dedicato
Prova
- A: our own device test; the number is the row in the attestation log
- Ap: Apple's support page describes the Camera app and Code Scanner as reading QR codes and lists no other symbology
- G: Google Lens decodes the ML Kit barcode formats: Codabar, Code 39, Code 93, Code 128, EAN-8, EAN-13, ITF, UPC-A, UPC-E, Aztec, Data Matrix, PDF417 and QR Code; Micro QR and rMQR are not on the list
- Z: Zebra lists Micro QR and rectangular Micro QR among the DS8100 series' 2D symbologies
- V: Apple's Vision framework decodes Micro QR for third-party apps since iOS 15; that is a developer API, not the Camera app
- Q: a standard QR symbol, so decoding is the attested QR result; the question is what the phone does with the payload
- U: not in our attestation log yet; from vendor documentation or field reports, treat as provisional
Cosa significa "risultato di scansione atteso"
- Decodes, Decodifica, il lettore nativo del telefono restituisce il payload senza necessitare di un'app separata.
- Partial, Parziale, la decodifica dipende da un'app specifica (autenticatore, portafoglio, banca) o da una versione specifica del SO.
- No decode, Nessuna decodifica, la fotocamera nativa non restituisce nulla. Richiede uno scanner o lettore specializzato.
- Le lettere in piccolo dopo ogni risultato indicano la prova: una A seguita da un numero è una riga del registro di attestazione qui sotto; le altre lettere sono documentazione del produttore, elencata sotto ogni tabella. Una U significa che non abbiamo ancora testato quella cella sui nostri dispositivi.
Note sulla metodologia
- Ogni fixture viene testato in andata e ritorno. Il nostro CI genera ogni codice in Chromium headless, lo decodifica tramite l'API
BarcodeDetectordel browser e verifica la corrispondenza della sottostringa. Un CI verde significa che il corpus è internamente coerente. - I risultati dello scanner in questa tabella provengono da test manuali su dispositivi reali. Non sintetizzato. iPhone 15 Pro su iOS 18.3, Pixel 8 su Android 14, imager Zebra DS8100 su firmware CAAACS00-002-R06.
- Pubblichiamo i risultati negativi. Se la fotocamera iPhone si rifiuta di decodificare una simbologia (Data Matrix, Aztec, PDF417), quella è 'Nessuna decodifica' nella tabella, non un rebranding di 'lettore nativo'.
- Il corpus è versionato. Quando aggiungiamo un tipo o correggiamo un bug dell'encoder, la corrispondente voce fixture viene spedita nello stesso commit. Il changelog registra ogni modifica ai fixture, e corpus.VERSION.txt riporta l'hash del file fixture da cui è stato costruito lo ZIP attuale.
Registro di attestazione della flotta scanner
Ogni test manuale su dispositivo, datato. Le righe vengono aggiunte quando acquisiamo hardware o un utente segnala una discrepanza; un risultato non cambia mai silenziosamente, riceve una nuova riga.
| # | Device | OS / app | Corpus slice | Result | Date | Notes |
|---|---|---|---|---|---|---|
| A1 | iPhone 15 Pro | iOS 18.3, native Camera | All QR fixtures | pass | 2026-04-10 | |
| A2 | iPhone 15 Pro | iOS 18.3, native Camera | Aztec, PDF417, Data Matrix | fail | 2026-04-10 | Nessuno decodifica nativamente (previsto, vedi /standards/non-qr-2d/) |
| A3 | iPhone 15 Pro | iOS 18.3, native Camera | AAMVA PDF417 | partial | 2026-04-10 | Il flusso compatibile con le patenti di iOS 17+ offre Aggiungi a Wallet; il PDF417 grezzo non viene restituito |
| A4 | iPhone 15 Pro | iOS 18.3, Wallet | eSIM LPA | pass | 2026-04-12 | Il flusso Aggiungi eSIM si attiva correttamente |
| A5 | Pixel 8 | Android 14, native Camera | All QR fixtures | pass | 2026-04-10 | |
| A6 | Pixel 8 | Android 14, Google Lens | Data Matrix | pass | 2026-04-10 | |
| A7 | Pixel 8 | Android 14, Google Lens | Aztec, PDF417 | partial | 2026-04-10 | Alcune varianti decodificano; il supporto è incostante |
| A8 | Zebra DS8100 | firmware CAAACS00-002-R06 | All 2D + 1D fixtures | pass | 2026-04-11 | Imager industriale, riferimento canonico |
| A9 | Google Authenticator | v7.0+ (iOS/Android) | TOTP, HOTP | pass | 2026-04-12 | Solo SHA-1, 6 cifre (ignora i parametri algoritmo/cifre secondo il profilo de facto di Google) |
| A10 | 1Password | v8 (iOS/Android/macOS) | TOTP, HOTP | pass | 2026-04-12 | Supporto RFC completo incl. SHA-256, SHA-512, 8 cifre |
Prossimamente
- Artefatti pre-renderizzati. Il ZIP attuale include fixture + metodologia + CSV. Una futura revisione aggiungerà SVG + PNG pre-renderizzati di ogni fixture in modo da poterli inserire direttamente in un harness di flotta scanner. Passo browser headless a tempo di compilazione in attesa.
- Attestazione flotta scanner. Il registro dispositivi datato è pubblicato su questa pagina e cresce ogni volta che verifichiamo contro un nuovo dispositivo.
- Verifica di terze parti. Un laboratorio di sicurezza indipendente esegue il corpus attraverso una flotta di scanner e pubblica un attestato firmato. In attesa, commissionato; il rapporto sarà pubblicato qui all'arrivo.
Vedi anche
- /test-vectors/, JSON completo dei fixture e tabella ricercabile.
- /compatibility/, matrice di compatibilità degli scanner live.
- /standards/, pagine di riferimento per standard.
- /print-size/, guida di stampa fisica che accompagna il corpus.