公开测试语料库
我们关于扫描仪兼容性的声明,其可信度取决于支撑它们的证据。这个页面就是语料库, , 我们用来对编码器家族进行回归测试的输入,以及无需相信我们的话就能自行审计的手机摄像头行为。
为什么存在这个页面:大多数 QR 工具会发布兼容性矩阵。我们发布的是矩阵背后的语料库。如果您负责管理一批扫描仪, , 零售、仓储、制药、航空、DMV, , 您可以用自己的读取设备运行这个语料库,验证我们做出的每一项声明。
下载 corpus.zip 打包的 fixtures JSON + CSV + 方法论 + README。约 4 KB。
正在加载版本…
如何使用语料库
下载 fixtures。
每个测试向量都在 /test-vectors/fixtures.json 中。每种类型一个 JSON 对象,包含输入字段和预期的解码子字符串。从本站实时获取,没有陈旧副本。
重新生成 QR 码。
取任意 fixture 的 fields 映射,将值输入该类型的生成器,然后点击生成。生成的 QR 码与我们 CI 往返测试所用的完全一致,逐位相同。
用您的设备群扫描。
将 iPhone Camera、Android Camera、Google Lens、工业扫描仪(Zebra、Honeywell、Datalogic)或特定应用读取器(银行应用、身份验证器)对准生成的 QR 码。确认解码文本包含该 fixture 的每个 expect 子字符串。
报告差异。
如果您的设备群中某台扫描仪返回的解码结果与 fixture 不符,请提交问题。我们会重现问题,将您的扫描仪添加到公开兼容性矩阵,并(如果是编码器缺陷)发布修复。
预期扫描结果
本表由与兼容性矩阵及每个类型页面上的“可扫描设备”一行相同的数据集渲染,因此三者不会出现矛盾。/test-vectors/ 上的完整 fixture 文件共有 33 条,每条对应我们回归测试的一个编码器家族;它不是每个产品类型对应一行,我们也不这样声称。
| 类型 | 测试输入 | iPhone Camera | Android Camera | 专业扫描仪 |
|---|---|---|---|---|
| URL | https://example.com/test | 打开链接A1 | 打开链接A5 | 解码成功A8 |
| WiFi | WIFI:S:MyNet;T:WPA;P:...;; | 加入网络A1 | 加入网络A5 | 解码 payloadA8 |
| WiFi Enterprise (EAP) | WPA2-EAP PEAP identity=alice@corp | iOS 17+,据报告支持U | 可解码;能否加入网络取决于厂商U | 解码 payloadQ |
| vCard | FN=Alice ORG=Acme ... | 添加到通讯录A1 | 添加到通讯录A5 | 解码 payloadA8 |
| TOTP | otpauth://totp/...?secret=JBSW... | 身份验证器应用可读取A9, A10 | 身份验证器应用可读取A9, A10 | 解码 URIA8 |
| eSIM | LPA:1$rsp.example.com$K2-LM... | iOS 17.4+ 可配置A4 | Android 13+ 可配置U | 解码 URIQ |
| Bitcoin (BIP-21) | bitcoin:1A1zP1eP... | 钱包应用打开Q | 钱包应用打开Q | 解码 URIQ |
| SEPA (EPC) | BCD header + name + IBAN + amount | 仅原始字符串Q | 仅原始字符串Q | 解码原始字符串Q |
| Swiss QR-bill | SPC header + IBAN + address + amount | 仅原始字符串Q | 仅原始字符串Q | 解码原始字符串Q |
| Micro QR | Compact payload | 无法解码V, U | 无法解码G | 工业读取器Z |
| rMQR | Rectangular payload | 无法解码U | 无法解码G | 较新的 Zebra、Scandit 和 Cognex 固件Z |
| GS1 Digital Link | https://id.gs1.org/01/09506000134352 | 打开 URLQ | 打开 URLQ | POS 固件解析 AIQ |
| Aztec | Arbitrary payload | 无法解码A2 | Google Lens,部分变体支持A7 | 原生支持A8 |
| Data Matrix | Arbitrary payload | 无法解码A2 | Google LensA6 | 原生支持A8 |
| PDF417 | AAMVA or arbitrary | 无法解码A2 | Google Lens,表现不稳定A7 | 原生支持A8 |
| AAMVA driver license | @\n\x1e\rANSI 636014100002DL... | iOS 17+ 驾照识别流程A3 | 仅限支持驾照解析的应用U | 原生支持A8 |
| EAN-13 / UPC-A | 0012345678905 | 无法解码Ap | Google LensG | 所有零售 POSA8 |
| Code 128 | ABC-123 | 无法解码Ap | Google LensG | 原生支持A8 |
标记说明
- ✓: 系统自带相机应用即可读取,无需额外安装应用
- ~: 在单元格标注的特定条件下可读取(特定应用、系统版本或模式)
- ✗: 无法解码;需要扫描应用或硬件设备
依据
- 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
"预期扫描结果"的含义
- 解码成功, 手机原生摄像头读取器无需单独应用即可返回 payload。
- 部分支持, 解码取决于特定应用(身份验证器、钱包、银行)或特定操作系统版本。
- 无法解码, 原生摄像头不返回任何内容。需要专用扫描仪或读取器。
- 结果后面的小字母标明依据来源:A 加数字表示下方验证日志中的一行;其他字母是厂商文档,列在每张表格下方。U 表示我们尚未亲自用设备测试过该单元格。
方法论说明
- 每个 fixture 都经过完整往返。我们的 CI 在无头 Chromium 中生成每个码,通过浏览器的
BarcodeDetectorAPI 重新解码,并验证子字符串匹配。CI 绿色表示语料库内部一致。 - 本表中的扫描仪结果来自真实设备上的手动测试。非合成。iOS 18.3 的 iPhone 15 Pro、Android 14 的 Pixel 8、固件 CAAACS00-002-R06 的 Zebra DS8100 成像仪。
- 我们公布负面结果。如果 iPhone Camera 拒绝解码某种符号体系(Data Matrix、Aztec、PDF417),表格中显示"无法解码",而非改称"原生读取器"。
- 语料库有版本控制。当我们添加类型或修复编码器缺陷时,相应的 fixture 条目会在同一次提交中发布。更新日志记录了每一次 fixture 变更,corpus.VERSION.txt 中记录着当前 ZIP 构建所依据的 fixture 文件哈希。
扫描仪设备群验证日志
每一次人工设备验证,都附有日期。每当我们获得新硬件或有用户报告差异,就会新增一行;结果不会被悄悄改动,而是新增一行记录。
| # | 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 | 均无法原生解码(符合预期,参见 /standards/non-qr-2d/) |
| A3 | iPhone 15 Pro | iOS 18.3, native Camera | AAMVA PDF417 | partial | 2026-04-10 | iOS 17+ 驾照识别流程提供添加到 Wallet 的选项;不会返回原始 PDF417 内容 |
| A4 | iPhone 15 Pro | iOS 18.3, Wallet | eSIM LPA | pass | 2026-04-12 | 添加 eSIM 流程可以正确触发 |
| 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 | 部分变体可以解码;支持情况不稳定 |
| A8 | Zebra DS8100 | firmware CAAACS00-002-R06 | All 2D + 1D fixtures | pass | 2026-04-11 | 工业成像仪,标准参照设备 |
| A9 | Google Authenticator | v7.0+ (iOS/Android) | TOTP, HOTP | pass | 2026-04-12 | 仅支持 SHA-1、6 位数字(按照 Google 事实标准配置,忽略 algorithm/digits 参数) |
| A10 | 1Password | v8 (iOS/Android/macOS) | TOTP, HOTP | pass | 2026-04-12 | 完整支持 RFC 规范,包括 SHA-256、SHA-512、8 位数字 |
即将推出
- 预渲染工件。当前 ZIP 包含 fixtures + 方法论 + CSV。未来版本将添加每个 fixture 的预渲染 SVG + PNG,方便您直接放入扫描仪设备群测试环境。等待构建时无头浏览器步骤。
- 扫描仪设备群认证。附日期的设备日志已发布在本页面上,每次验证新设备时都会增长。
- 第三方验证。独立安全实验室通过扫描仪设备群运行语料库并发布签名认证。等待中, , 已委托;报告到达后将在此发布。
另请参阅
- /test-vectors/, 完整的 fixture JSON 和可搜索的表格。
- /compatibility/, 实时扫描仪兼容性矩阵。
- /standards/, 各标准参考页面。
- /print-size/, 配合语料库使用的实体打印指南。