QR码的Reed Solomon纠错

Reed Solomon error correction for QR-Code

由于 QR 码使用 Reed-Solomon 进行纠错,我是对的吗?在一定程度的损坏情况下,QR 码 reader 理论上可能会 return 错误结果?

如果是,是否有其他级别的完整性检查(校验和等)可以防止这种情况发生?

您可以在网络上搜索 "QR Code ISO",以查找文档的 pdf 版本。我在这里找到了一个:

https://www.swisseduc.ch/informatik/theoretische_informatik/qr_codes/docs/qr_standard.pdf

标准中有多种纠错强度,为了避免误纠错,在某些情况下,部分"parity"字节仅用于检错,不用于纠错。这显示在上面链接的 pdf 文件的 table 13 中。标有 "b" 的是一些奇偶校验字节仅用于错误检测的情况。例如,table13 中的第一个条目显示 (26,19,2)b,这意味着 26 个总字节、19 个数据字节和 2 个字节校正,这意味着 26-19 = 7 个奇偶校验字节, 4 用于校正(每个校正字节需要 2 个奇偶校验字节,除非硬件可以标记 "erasures"),而 3 仅用于检测。

如果纠错计算出一个无效位置("outside" 有效位置范围内的位置),该位置将被标记为检测到的错误。如果唯一计算位置的数量小于用于计算这些位置(重复或不存在的根)的假定错误数量,则将被标记为检测到的错误。对于更高级别的纠错,所有计算出的位置对错误数据有效的几率非常小,以至于 none 的奇偶校验字节仅用于错误检测。这些案例的 table 13 个条目中没有 "b"。

针对不同级别的纠错所做的选择导致出现不良结果的可能性非常小,但始终有可能。

are there other levels of integrity checks (checksums etc.) that would prevent that?

QR 码 reader 可以将任何位不明确为 0 或 1(如黑白代码上的灰色阴影)的字节标记为潜在 "erasures",这会降低坏结果的几率。不知道这样搞定没有。

生成 QR 码时,会选择一个遮罩来平衡代码中明暗区域的比例,并且在校正后,如果有证据表明选择了错误的遮罩,则可以将其标记为检测到错误,但我不确定在打印代码时是否始终选择 "best" 掩码,所以我不知道是否使用了 "best" 掩码检查。