Publiczny korpus testowy
Nasze twierdzenia o kompatybilności skanerów są tyle warte, ile dowody, na których się opierają. Ta strona to korpus, dane wejściowe, względem których regresyjnie testujemy nasze rodziny koderów, oraz zachowanie aparatu telefonu, które możesz samodzielnie zweryfikować bez konieczności ufania nam na słowo.
Pobierz corpus.zip Pakiet fixtures JSON + CSV + metodologia + README. ~4 KB.
Ładowanie wersji…
Jak używać korpusu
Każdy wektor testowy znajduje się w /test-vectors/fixtures.json. Jeden obiekt JSON na typ z polami wejściowymi i oczekiwanymi podciągami zdekodowanymi. Pobierane na żywo z tej strony, żadnych nieaktualnych kopii.
Weź mapę fields dowolnej fixture, wstaw wartości do generatora dla tego typu i kliknij Generuj. Wynikowy QR jest bit po bicie identyczny z tym, co nasze CI testuje w cyklu.
Skieruj iPhone Camera, Android Camera, Google Lens, skaner przemysłowy (Zebra, Honeywell, Datalogic) lub czytnik dedykowany dla aplikacji (aplikacja bankowa, autentykator) na wygenerowany QR. Potwierdź, że zdekodowany tekst zawiera każdy podciąg expect dla danej fixture.
Jeśli skaner w Twojej flocie zwróci dekodowanie niezgodne z fixture, zgłoś problem. Odtworzymy go, dodamy Twój skaner do publicznej matrycy kompatybilności i (jeśli to błąd kodera) wyślemy poprawkę.
Oczekiwane wyniki skanowania
Renderowane z tego samego zbioru danych co macierz kompatybilności i linia „Skanuje na" na każdej stronie typu, więc te trzy nie mogą się wzajemnie przeczyć. Pełny plik fixture pod adresem /test-vectors/ zawiera 33 wpisów, po jednym na rodzinę koderów, którą regresyjnie testujemy; to nie jest jeden wiersz na typ produktu i nie twierdzimy, że jest.
| Typ | Wejście fixture | iPhone Camera | Android Camera | Skaner profesjonalny |
|---|---|---|---|---|
| URL | https://example.com/test | Otwiera linkA1 | Otwiera linkA5 | DekodujeA8 |
| WiFi | WIFI:S:MyNet;T:WPA;P:...;; | Łączy z sieciąA1 | Łączy z sieciąA5 | Dekoduje payloadA8 |
| WiFi Enterprise (EAP) | WPA2-EAP PEAP identity=alice@corp | iOS 17+, zgłaszaneU | Dekoduje; dołączenie zależy od producentaU | Dekoduje payloadQ |
| vCard | FN=Alice ORG=Acme ... | Dodaj do kontaktówA1 | Dodaj do kontaktówA5 | Dekoduje payloadA8 |
| TOTP | otpauth://totp/...?secret=JBSW... | Odczytuje to aplikacja uwierzytelniającaA9, A10 | Odczytuje to aplikacja uwierzytelniającaA9, A10 | Dekoduje URIA8 |
| eSIM | LPA:1$rsp.example.com$K2-LM... | iOS 17.4+ udostępniaA4 | Android 13+ udostępniaU | Dekoduje URIQ |
| Bitcoin (BIP-21) | bitcoin:1A1zP1eP... | Otwiera się aplikacja portfelaQ | Otwiera się aplikacja portfelaQ | Dekoduje URIQ |
| SEPA (EPC) | BCD header + name + IBAN + amount | Tylko surowy ciągQ | Tylko surowy ciągQ | Dekoduje surowy ciągQ |
| Swiss QR-bill | SPC header + IBAN + address + amount | Tylko surowy ciągQ | Tylko surowy ciągQ | Dekoduje surowy ciągQ |
| Micro QR | Compact payload | Brak dekodowaniaV, U | Brak dekodowaniaG | Czytniki przemysłoweZ |
| rMQR | Rectangular payload | Brak dekodowaniaU | Brak dekodowaniaG | Nowszy firmware Zebra, Scandit i CognexZ |
| GS1 Digital Link | https://id.gs1.org/01/09506000134352 | Otwiera URLQ | Otwiera URLQ | Firmware POS parsuje AIQ |
| Aztec | Arbitrary payload | Brak dekodowaniaA2 | Google Lens, niektóre wariantyA7 | NatywneA8 |
| Data Matrix | Arbitrary payload | Brak dekodowaniaA2 | Google LensA6 | NatywneA8 |
| PDF417 | AAMVA or arbitrary | Brak dekodowaniaA2 | Google Lens, niejednolicieA7 | NatywneA8 |
| AAMVA driver license | @\n\x1e\rANSI 636014100002DL... | iOS 17+, przepływ obsługujący prawo jazdyA3 | Tylko aplikacje obsługujące prawo jazdyU | NatywneA8 |
| EAN-13 / UPC-A | 0012345678905 | Brak dekodowaniaAp | Google LensG | Każdy POS detalicznyA8 |
| Code 128 | ABC-123 | Brak dekodowaniaAp | Google LensG | NatywneA8 |
Jak czytać oznaczenia
- ✓: odczytuje to ze standardowej aplikacji aparatu, bez dodatkowej aplikacji
- ~: odczytuje to pod warunkiem podanym w komórce (konkretna aplikacja, wersja systemu lub tryb)
- ✗: nie dekoduje tego; potrzebujesz aplikacji-skanera lub sprzętu
Dowód
- 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
Co oznacza „oczekiwany wynik skanowania"
- Dekoduje, natywny czytnik aparatu telefonu zwraca payload bez potrzeby oddzielnej aplikacji.
- Częściowo, dekodowanie zależy od konkretnej aplikacji (autentykator, portfel, bankowość) lub konkretnej wersji systemu operacyjnego.
- Brak dekodowania, natywny aparat nie zwraca niczego. Wymagany jest specjalistyczny skaner lub czytnik.
- Małe litery po każdym wyniku wskazują dowód: A plus liczba to wiersz dziennika atestacji poniżej; inne litery to dokumentacja dostawcy, wymieniona pod każdą tabelą. U oznacza, że jeszcze nie sprawdziliśmy tej komórki na własnych urządzeniach.
Uwagi metodologiczne
- Każda fixture przechodzi pełny cykl. Nasze CI generuje każdy kod w bezgłowym Chromium, dekoduje go z powrotem przez API
BarcodeDetectorprzeglądarki i weryfikuje dopasowanie podciągu. Zielone CI oznacza, że korpus jest wewnętrznie spójny. - Wyniki skanerów w tej tabeli pochodzą z ręcznych testów na prawdziwych urządzeniach. Nie są syntetyzowane. iPhone 15 Pro na iOS 18.3, Pixel 8 na Android 14, Zebra DS8100 imager na firmware CAAACS00-002-R06.
- Publikujemy negatywne wyniki. Jeśli iPhone Camera odmawia dekodowania symbologii (Data Matrix, Aztec, PDF417), w tabeli widnieje „Brak dekodowania", nie przemianowujemy tego na „natywny czytnik".
- Korpus jest wersjonowany. Gdy dodajemy typ lub naprawiamy błąd kodera, odpowiadający wpis fixture trafia do tego samego commitu. Changelog odnotowuje każdą zmianę fixture, a corpus.VERSION.txt zawiera hash pliku fixture, z którego zbudowano bieżący ZIP.
Dziennik atestacji floty skanerów
Każdy ręczny test urządzenia, datowany. Wiersze są dodawane, gdy zdobywamy nowy sprzęt lub użytkownik zgłasza rozbieżność; wynik nigdy nie zmienia się po cichu, dostaje nowy wiersz.
| # | 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 | Żaden nie dekoduje natywnie (oczekiwane, zobacz /standards/non-qr-2d/) |
| A3 | iPhone 15 Pro | iOS 18.3, native Camera | AAMVA PDF417 | partial | 2026-04-10 | Przepływ iOS 17+ obsługujący prawo jazdy oferuje dodanie do Wallet; surowy PDF417 nie jest zwracany |
| A4 | iPhone 15 Pro | iOS 18.3, Wallet | eSIM LPA | pass | 2026-04-12 | Przepływ dodawania eSIM uruchamia się poprawnie |
| 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 | Niektóre warianty dekodują; wsparcie jest niejednolite |
| A8 | Zebra DS8100 | firmware CAAACS00-002-R06 | All 2D + 1D fixtures | pass | 2026-04-11 | Przemysłowy imager, kanoniczne odniesienie |
| A9 | Google Authenticator | v7.0+ (iOS/Android) | TOTP, HOTP | pass | 2026-04-12 | Tylko SHA-1, 6 cyfr (ignoruje parametry algorithm/digits zgodnie z faktycznym profilem Google) |
| A10 | 1Password | v8 (iOS/Android/macOS) | TOTP, HOTP | pass | 2026-04-12 | Pełne wsparcie RFC wraz z SHA-256, SHA-512, 8 cyfr |
Co nadchodzi
- Wstępnie wyrenderowane artefakty. Obecny ZIP zawiera fixtures + metodologię + CSV. Przyszła wersja doda wstępnie wyrenderowane SVG + PNG każdej fixture, dzięki czemu będziesz mógł wrzucić je bezpośrednio do uprzęży floty skanerów. Oczekuje na etap bezgłowej przeglądarki podczas budowania.
- Attestacja floty skanerów. Datowany dziennik urządzeń jest opublikowany na tej stronie i rośnie za każdym razem, gdy weryfikujemy nowe urządzenie.
- Weryfikacja przez trzecią stronę. Niezależne laboratorium bezpieczeństwa uruchamia korpus przez flotę skanerów i publikuje podpisaną attestację. W toku, zlecono; raport zostanie tu opublikowany po dostarczeniu.
Zobacz też
- /test-vectors/, pełny fixture JSON i przeszukiwalna tabela.
- /compatibility/, aktualna matryca kompatybilności skanerów.
- /standards/, strony referencyjne dla poszczególnych standardów.
- /print-size/, wskazówki dotyczące druku fizycznego uzupełniające korpus.