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.

Dlaczego to istnieje: większość narzędzi do QR publikuje matrycę kompatybilności. My publikujemy korpus stojący za tą matrycą. Jeśli odpowiadasz za flotę skanerów, handel detaliczny, magazyny, farmacja, lotnictwo, DMV, możesz uruchomić ten korpus przez własne czytniki i zweryfikować każde nasze twierdzenie.

Pobierz corpus.zip Pakiet fixtures JSON + CSV + metodologia + README. ~4 KB.

Ładowanie wersji…

Jak używać korpusu

Pobierz fixtures.

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.

Wygeneruj QR ponownie.

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.

Skanuj własną flotą.

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.

Zgłaszaj rozbieżności.

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.

TypWejście fixtureiPhone CameraAndroid CameraSkaner profesjonalny
URLhttps://example.com/testOtwiera linkA1Otwiera linkA5DekodujeA8
WiFiWIFI:S:MyNet;T:WPA;P:...;;Łączy z sieciąA1Łączy z sieciąA5Dekoduje payloadA8
WiFi Enterprise (EAP)WPA2-EAP PEAP identity=alice@corpiOS 17+, zgłaszaneUDekoduje; dołączenie zależy od producentaUDekoduje payloadQ
vCardFN=Alice ORG=Acme ...Dodaj do kontaktówA1Dodaj do kontaktówA5Dekoduje payloadA8
TOTPotpauth://totp/...?secret=JBSW...Odczytuje to aplikacja uwierzytelniającaA9, A10Odczytuje to aplikacja uwierzytelniającaA9, A10Dekoduje URIA8
eSIMLPA:1$rsp.example.com$K2-LM...iOS 17.4+ udostępniaA4Android 13+ udostępniaUDekoduje URIQ
Bitcoin (BIP-21)bitcoin:1A1zP1eP...Otwiera się aplikacja portfelaQOtwiera się aplikacja portfelaQDekoduje URIQ
SEPA (EPC)BCD header + name + IBAN + amountTylko surowy ciągQTylko surowy ciągQDekoduje surowy ciągQ
Swiss QR-billSPC header + IBAN + address + amountTylko surowy ciągQTylko surowy ciągQDekoduje surowy ciągQ
Micro QRCompact payloadBrak dekodowaniaV, UBrak dekodowaniaGCzytniki przemysłoweZ
rMQRRectangular payloadBrak dekodowaniaUBrak dekodowaniaGNowszy firmware Zebra, Scandit i CognexZ
GS1 Digital Linkhttps://id.gs1.org/01/09506000134352Otwiera URLQOtwiera URLQFirmware POS parsuje AIQ
AztecArbitrary payloadBrak dekodowaniaA2Google Lens, niektóre wariantyA7NatywneA8
Data MatrixArbitrary payloadBrak dekodowaniaA2Google LensA6NatywneA8
PDF417AAMVA or arbitraryBrak dekodowaniaA2Google Lens, niejednolicieA7NatywneA8
AAMVA driver license@\n\x1e\rANSI 636014100002DL...iOS 17+, przepływ obsługujący prawo jazdyA3Tylko aplikacje obsługujące prawo jazdyUNatywneA8
EAN-13 / UPC-A0012345678905Brak dekodowaniaApGoogle LensGKażdy POS detalicznyA8
Code 128ABC-123Brak dekodowaniaApGoogle LensGNatywneA8

Jak czytać oznaczenia

Dowód

Co oznacza „oczekiwany wynik skanowania"

Uwagi metodologiczne

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.

#DeviceOS / appCorpus sliceResultDateNotes
A1iPhone 15 ProiOS 18.3, native CameraAll QR fixturespass2026-04-10
A2iPhone 15 ProiOS 18.3, native CameraAztec, PDF417, Data Matrixfail2026-04-10Żaden nie dekoduje natywnie (oczekiwane, zobacz /standards/non-qr-2d/)
A3iPhone 15 ProiOS 18.3, native CameraAAMVA PDF417partial2026-04-10Przepływ iOS 17+ obsługujący prawo jazdy oferuje dodanie do Wallet; surowy PDF417 nie jest zwracany
A4iPhone 15 ProiOS 18.3, WalleteSIM LPApass2026-04-12Przepływ dodawania eSIM uruchamia się poprawnie
A5Pixel 8Android 14, native CameraAll QR fixturespass2026-04-10
A6Pixel 8Android 14, Google LensData Matrixpass2026-04-10
A7Pixel 8Android 14, Google LensAztec, PDF417partial2026-04-10Niektóre warianty dekodują; wsparcie jest niejednolite
A8Zebra DS8100firmware CAAACS00-002-R06All 2D + 1D fixturespass2026-04-11Przemysłowy imager, kanoniczne odniesienie
A9Google Authenticatorv7.0+ (iOS/Android)TOTP, HOTPpass2026-04-12Tylko SHA-1, 6 cyfr (ignoruje parametry algorithm/digits zgodnie z faktycznym profilem Google)
A101Passwordv8 (iOS/Android/macOS)TOTP, HOTPpass2026-04-12Pełne wsparcie RFC wraz z SHA-256, SHA-512, 8 cyfr

Co nadchodzi

Zobacz też

Korpus ostatnio testowany regresyjnie 2026-04-18. Zweryfikowane urządzenia: iPhone 15 Pro / iOS 18.3, Pixel 8 / Android 14, Zebra DS8100.