Öffentliches Testkorpus
Unsere Scanner-Kompatibilitätsbehauptungen sind nur so gut wie die Beweise, auf denen sie basieren. Diese Seite ist das Corpus, die Eingaben, gegen die wir unsere Encoder-Familien in der Regression testen, plus das Handykamera-Verhalten, das Sie selbst prüfen können, ohne uns auf unser Wort zu vertrauen.
corpus.zip herunterladen Fixtures JSON + CSV + Methodik + README. ~4 KB.
Version wird geladen…
So verwenden Sie das Corpus
Jeder Testvektor ist in /test-vectors/fixtures.json. Ein JSON-Objekt pro Typ mit den Eingabefeldern und den erwarteten dekodierten Teilzeichenfolgen. Live von dieser Seite abgerufen, keine veralteten Kopien.
Nehmen Sie die fields-Map eines beliebigen Fixtures, geben Sie die Werte in den Generator für diesen Typ ein und klicken Sie auf Generieren. Der resultierende QR ist bit-für-bit identisch mit dem, was unser CI als Round-Trip verarbeitet.
Richten Sie eine iPhone-Kamera, Android-Kamera, Google Lens, einen Industriescanner (Zebra, Honeywell, Datalogic) oder einen App-spezifischen Leser (Banking-App, Authenticator) auf den generierten QR. Bestätigen Sie, dass der dekodierte Text jede expect-Teilzeichenfolge für dieses Fixture enthält.
Wenn ein Scanner in Ihrer Flotte eine Dekodierung zurückgibt, die nicht mit dem Fixture übereinstimmt, öffnen Sie ein Issue. Wir reproduzieren es, fügen Ihren Scanner zur öffentlichen Kompatibilitätsmatrix hinzu und (falls es ein Encoder-Bug ist) stellen einen Fix bereit.
Erwartete Scan-Ergebnisse
Gerendert aus demselben Datensatz wie die Kompatibilitätsmatrix und die "Scannt auf"-Zeile jeder Typseite, sodass die drei sich nicht widersprechen können. Die vollständige Fixture-Datei unter /test-vectors/ hat 33 Einträge, einen pro Encoder-Familie, die wir in der Regression testen; es ist nicht eine Zeile pro Produkttyp, und das behaupten wir auch nicht.
| Typ | Fixture-Eingabe | iPhone Camera | Android Camera | Pro-Scanner |
|---|---|---|---|---|
| URL | https://example.com/test | Öffnet LinkA1 | Öffnet LinkA5 | DekodiertA8 |
| WiFi | WIFI:S:MyNet;T:WPA;P:...;; | Verbindet mit NetzwerkA1 | Verbindet mit NetzwerkA5 | Dekodiert PayloadA8 |
| WiFi Enterprise (EAP) | WPA2-EAP PEAP identity=alice@corp | iOS 17+, gemeldetU | Dekodiert; Beitritt hängt vom Hersteller abU | Dekodiert PayloadQ |
| vCard | FN=Alice ORG=Acme ... | Zu Kontakten hinzufügenA1 | Zu Kontakten hinzufügenA5 | Dekodiert PayloadA8 |
| TOTP | otpauth://totp/...?secret=JBSW... | Authenticator-App liest esA9, A10 | Authenticator-App liest esA9, A10 | Dekodiert URIA8 |
| eSIM | LPA:1$rsp.example.com$K2-LM... | iOS 17.4+ provisioniertA4 | Android 13+ provisioniertU | Dekodiert URIQ |
| Bitcoin (BIP-21) | bitcoin:1A1zP1eP... | Wallet-App öffnet sichQ | Wallet-App öffnet sichQ | Dekodiert URIQ |
| SEPA (EPC) | BCD header + name + IBAN + amount | Nur RohtextQ | Nur RohtextQ | Dekodiert RohtextQ |
| Swiss QR-bill | SPC header + IBAN + address + amount | Nur RohtextQ | Nur RohtextQ | Dekodiert RohtextQ |
| Micro QR | Compact payload | Kein DekodierenV, U | Kein DekodierenG | Industrielle LesegeräteZ |
| rMQR | Rectangular payload | Kein DekodierenU | Kein DekodierenG | Neuere Zebra-, Scandit- und Cognex-FirmwareZ |
| GS1 Digital Link | https://id.gs1.org/01/09506000134352 | Öffnet URLQ | Öffnet URLQ | POS-Firmware wertet die AIs ausQ |
| Aztec | Arbitrary payload | Kein DekodierenA2 | Google Lens, einige VariantenA7 | NativA8 |
| Data Matrix | Arbitrary payload | Kein DekodierenA2 | Google LensA6 | NativA8 |
| PDF417 | AAMVA or arbitrary | Kein DekodierenA2 | Google Lens, uneinheitlichA7 | NativA8 |
| AAMVA driver license | @\n\x1e\rANSI 636014100002DL... | iOS 17+ lizenzfähiger AblaufA3 | Nur lizenzfähige AppsU | NativA8 |
| EAN-13 / UPC-A | 0012345678905 | Kein DekodierenAp | Google LensG | Jedes Einzelhandels-POSA8 |
| Code 128 | ABC-123 | Kein DekodierenAp | Google LensG | NativA8 |
Wie man die Markierungen liest
- ✓: wird von der Standard-Kamera-App gelesen, keine zusätzliche App nötig
- ~: wird unter einer in der Zelle genannten Bedingung gelesen (eine bestimmte App, Betriebssystemversion oder ein Modus)
- ✗: dekodiert es nicht; Sie brauchen eine Scanner-App oder Hardware
Beleg
- 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
Was "erwartetes Scan-Ergebnis" bedeutet
- Decodes, Dekodiert, nativer Telefonleser gibt das Payload zurück, ohne eine separate App zu benötigen.
- Partial, Teilweise, Dekodierung hängt von einer bestimmten App (Authenticator, Wallet, Banking) oder einer bestimmten OS-Version ab.
- No decode, Kein Dekodieren, native Kamera gibt nichts zurück. Erfordert einen Spezialscanner oder -leser.
- Die kleinen Buchstaben nach jedem Ergebnis nennen den Beleg: A plus eine Zahl ist eine Zeile des Attestierungsprotokolls unten; andere Buchstaben sind Herstellerdokumentation, aufgelistet unter jeder Tabelle. Ein U bedeutet, dass wir diese Zelle noch nicht mit unseren eigenen Geräten getestet haben.
Methodologiehinweise
- Jedes Fixture wird als Round-Trip getestet. Unser CI generiert jeden Code in Headless-Chromium, dekodiert ihn über die Browser-API
BarcodeDetectorzurück und prüft die Teilzeichenfolgenübereinstimmung. Ein grünes CI bedeutet, dass das Corpus intern konsistent ist. - Scanner-Ergebnisse in dieser Tabelle stammen aus manuellen Tests auf echten Geräten. Nicht synthetisiert. iPhone 15 Pro auf iOS 18.3, Pixel 8 auf Android 14, Zebra DS8100 Imager auf Firmware CAAACS00-002-R06.
- Wir veröffentlichen negative Ergebnisse. Wenn iPhone Camera sich weigert, eine Symbologie zu dekodieren (Data Matrix, Aztec, PDF417), ist das ein 'Kein Dekodieren' in der Tabelle, keine Umbenennung zu 'nativer Leser'.
- Das Corpus ist versioniert. Wenn wir einen Typ hinzufügen oder einen Encoder-Bug beheben, wird der entsprechende Fixture-Eintrag im selben Commit ausgeliefert. Das Änderungsprotokoll verzeichnet jede Fixture-Änderung, und corpus.VERSION.txt trägt den Hash der Fixture-Datei, aus der das aktuelle ZIP gebaut wurde.
Scanner-Flotten-Attestierungsprotokoll
Jeder manuelle Gerätetest, datiert. Zeilen werden hinzugefügt, wenn wir neue Hardware bekommen oder ein Nutzer eine Abweichung meldet; ein Ergebnis ändert sich nie stillschweigend, es bekommt eine neue Zeile.
| # | 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 | Keines dekodiert nativ (erwartet, siehe /standards/non-qr-2d/) |
| A3 | iPhone 15 Pro | iOS 18.3, native Camera | AAMVA PDF417 | partial | 2026-04-10 | iOS 17+ lizenzfähiger Ablauf bietet „Zu Wallet hinzufügen" an; rohes PDF417 wird nicht zurückgegeben |
| A4 | iPhone 15 Pro | iOS 18.3, Wallet | eSIM LPA | pass | 2026-04-12 | eSIM-Hinzufügen-Ablauf löst korrekt aus |
| 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 | Einige Varianten dekodieren; Unterstützung ist uneinheitlich |
| A8 | Zebra DS8100 | firmware CAAACS00-002-R06 | All 2D + 1D fixtures | pass | 2026-04-11 | Industrieller Imager, kanonische Referenz |
| A9 | Google Authenticator | v7.0+ (iOS/Android) | TOTP, HOTP | pass | 2026-04-12 | Nur SHA-1, 6-stellig (ignoriert Algorithmus-/Ziffern-Parameter gemäß Googles De-facto-Profil) |
| A10 | 1Password | v8 (iOS/Android/macOS) | TOTP, HOTP | pass | 2026-04-12 | Vollständige RFC-Unterstützung inkl. SHA-256, SHA-512, 8-stellig |
Demnächst
- Vorgerenderte Artefakte. Das aktuelle ZIP enthält Fixtures + Methodik + CSV. Eine zukünftige Revision fügt vorgerendertes SVG + PNG jedes Fixtures hinzu, damit Sie es direkt in ein Scanner-Flotten-Harness einfügen können. Build-time-Headless-Browser-Schritt ausstehend.
- Scanner-Flotten-Attestierung. Das datierte Geräteprotokoll ist auf dieser Seite veröffentlicht und wächst bei jeder Verifikation gegen ein neues Gerät.
- Drittanbieter-Verifikation. Ein unabhängiges Sicherheitslabor führt das Corpus durch eine Scanner-Flotte und veröffentlicht eine signierte Attestierung. Ausstehend, beauftragt; Bericht wird hier bei Ankunft veröffentlicht.
Siehe auch
- /test-vectors/, Vollständiges Fixture-JSON und durchsuchbare Tabelle.
- /compatibility/, Live-Scanner-Kompatibilitätsmatrix.
- /standards/, Referenzseiten pro Standard.
- /print-size/, Physischer Druckleitfaden, der das Corpus begleitet.