Публичный тестовый корпус

Наши заявления о совместимости со сканерами не лучше доказательств, на которых они основаны. Эта страница и есть корпус, входные данные, по которым мы регрессионно тестируем семейства наших кодировщиков, плюс поведение камеры телефона, которое можно проверить самостоятельно, не доверяя нам на слово.

Зачем это нужно: большинство QR-инструментов публикуют матрицу совместимости. Мы публикуем корпус, стоящий за этой матрицей. Если вы отвечаете за парк сканеров, в рознице, на складе, в фармацевтике, авиации или DMV, вы можете прогнать этот корпус через собственные устройства и проверить каждое наше утверждение.

Скачать corpus.zip Набор fixtures JSON + CSV + методология + README. ~4 КБ.

Загрузка версии…

Как использовать корпус

Скачайте fixtures.

Каждый тестовый вектор находится в /test-vectors/fixtures.json. Один объект JSON на тип с полями ввода и ожидаемыми декодированными подстроками. Загружается в реальном времени с этого сайта, никаких устаревших копий.

Сгенерируйте QR-коды заново.

Возьмите карту fields любого fixture, введите значения в генератор для этого типа и нажмите «Сгенерировать». Полученный QR-код побитово идентичен тому, что наш CI тестирует в цикле.

Сканируйте собственным парком.

Направьте iPhone Camera, Android Camera, Google Lens, промышленный сканер (Zebra, Honeywell, Datalogic) или специализированный считыватель приложений (банковское приложение, аутентификатор) на сгенерированный QR-код. Убедитесь, что декодированный текст содержит каждую подстроку expect для данного fixture.

Сообщайте о расхождениях.

Если сканер в вашем парке вернёт декодирование, не совпадающее с fixture, создайте задачу. Мы воспроизведём проблему, добавим ваш сканер в публичную матрицу совместимости и (если это ошибка кодировщика) выпустим исправление.

Ожидаемые результаты сканирования

Рендерится из того же набора данных, что и матрица совместимости, и строка «Сканируется на» на каждой странице типа, поэтому эти три источника не могут расходиться. Полный файл fixture на /test-vectors/ содержит 33 записей, по одной на семейство кодировщиков, которое мы регрессионно тестируем; это не одна строка на каждый тип продукта, и мы этого не утверждаем.

ТипВходные данные fixtureiPhone CameraAndroid CameraПрофессиональный сканер
URLhttps://example.com/testОткрывает ссылкуA1Открывает ссылкуA5ДекодируетA8
WiFiWIFI:S:MyNet;T:WPA;P:...;;Подключается к сетиA1Подключается к сетиA5Декодирует payloadA8
WiFi Enterprise (EAP)WPA2-EAP PEAP identity=alice@corpiOS 17+, по сообщениямUДекодирует; подключение зависит от производителяUДекодирует payloadQ
vCardFN=Alice ORG=Acme ...Добавить в контактыA1Добавить в контактыA5Декодирует payloadA8
TOTPotpauth://totp/...?secret=JBSW...Читает приложение-аутентификаторA9, A10Читает приложение-аутентификаторA9, A10Декодирует URIA8
eSIMLPA:1$rsp.example.com$K2-LM...iOS 17.4+ подготавливаетA4Android 13+ подготавливаетUДекодирует URIQ
Bitcoin (BIP-21)bitcoin:1A1zP1eP...Открывает приложение кошелькаQОткрывает приложение кошелькаQДекодирует URIQ
SEPA (EPC)BCD header + name + IBAN + amountТолько сырая строкаQТолько сырая строкаQДекодирует сырую строкуQ
Swiss QR-billSPC header + IBAN + address + amountТолько сырая строкаQТолько сырая строкаQДекодирует сырую строкуQ
Micro QRCompact payloadНе декодируетV, UНе декодируетGПромышленные считывателиZ
rMQRRectangular payloadНе декодируетUНе декодируетGНовые прошивки Zebra, Scandit и CognexZ
GS1 Digital Linkhttps://id.gs1.org/01/09506000134352Открывает URLQОткрывает URLQПрошивка POS разбирает AIQ
AztecArbitrary payloadНе декодируетA2Google Lens, некоторые вариантыA7НативноA8
Data MatrixArbitrary payloadНе декодируетA2Google LensA6НативноA8
PDF417AAMVA or arbitraryНе декодируетA2Google Lens, нестабильноA7НативноA8
AAMVA driver license@\n\x1e\rANSI 636014100002DL...iOS 17+, поток с поддержкой удостоверенийA3Только приложения с поддержкой удостоверенийUНативноA8
EAN-13 / UPC-A0012345678905Не декодируетApGoogle LensGЛюбой розничный POSA8
Code 128ABC-123Не декодируетApGoogle LensGНативноA8

Как читать отметки

Доказательства

Что означает «ожидаемый результат сканирования»

Методологические заметки

Журнал аттестации парка сканеров

Каждый ручной прогон устройства, датированный. Строки добавляются, когда мы получаем новое оборудование или пользователь сообщает о расхождении; результат никогда не меняется незаметно, для этого создаётся новая строка.

#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Ни один не декодирует нативно (ожидаемо, см. /standards/non-qr-2d/)
A3iPhone 15 ProiOS 18.3, native CameraAAMVA PDF417partial2026-04-10Поток iOS 17+ с поддержкой удостоверений предлагает добавить в Wallet; сырой PDF417 не возвращается
A4iPhone 15 ProiOS 18.3, WalleteSIM LPApass2026-04-12Поток добавления eSIM срабатывает корректно
A5Pixel 8Android 14, native CameraAll QR fixturespass2026-04-10
A6Pixel 8Android 14, Google LensData Matrixpass2026-04-10
A7Pixel 8Android 14, Google LensAztec, PDF417partial2026-04-10Некоторые варианты декодируются; поддержка нестабильна
A8Zebra DS8100firmware CAAACS00-002-R06All 2D + 1D fixturespass2026-04-11Промышленный имиджер, эталонный образец
A9Google Authenticatorv7.0+ (iOS/Android)TOTP, HOTPpass2026-04-12Только SHA-1, 6 цифр (игнорирует параметры algorithm/digits по де-факто профилю Google)
A101Passwordv8 (iOS/Android/macOS)TOTP, HOTPpass2026-04-12Полная поддержка RFC, включая SHA-256, SHA-512, 8 цифр

Что ожидается

Смотрите также

Корпус последний раз прошёл регрессионное тестирование 2026-04-18. Проверенные устройства: iPhone 15 Pro / iOS 18.3, Pixel 8 / Android 14, Zebra DS8100.