为什么掩膜、版本、纠错相同的二维码点分布不同?
Why qr-code with same mask, version and error correction has different dot distribution?
在visualead.com二维码生成器中有选项可以选择如何填写二维码。
有两个二维码:
https://i.stack.imgur.com/izGH6.png
https://i.stack.imgur.com/m0wX5.png
使用相同版本编码的相同数据=3,纠错级别=M,掩码=1。但是,是什么造成了这种不同的点分布?
经过多次测试,我发现:
QR 码有效负载还取决于数据编码。如果您采用 UTF-8,QR 码看起来肯定与使用 Latin-1 (ISO-8859-1) 不同。如果您将 QR 码生成器设置为以相同方式编码数据,QR 码将看起来相同。
因此(对于符合标准的 QR 码)需要:
- 相同数据
- 相同的二维码版本
- 相同的面具图案
- 相同纠错级别
- 相同的二维码编码(数字、字母数字、字节...)
- 相同的数据编码(独立于二维码设置)
编辑: 正如 Mark Ambrazhevich 在此答案的评论中提到的,QR 码也可能依赖于以下内容,请记住这违反了 QR -代码标准(ISO/IEC 18004:2015):数据被插入QR-Code后,必须达到'filled up'的限制。根据标准,占位符 11101100
和 00010001
应该交替使用。但就像 Russ Cox 在 https://research.swtch.com/qart 上讨论的那样:
(post-terminator patterns) [...] Technically that's a violation of the spec, which prescribes a specific repeating 2-byte fill, but if all the readers you care about don't check the fill, then I agree it produces much nicer codes.
根据同一站点上的 Kevin Baker 的说法,许多商业 QR 码阅读器不检查 post-terminator-data。
在visualead.com二维码生成器中有选项可以选择如何填写二维码。
有两个二维码:
https://i.stack.imgur.com/izGH6.png https://i.stack.imgur.com/m0wX5.png
使用相同版本编码的相同数据=3,纠错级别=M,掩码=1。但是,是什么造成了这种不同的点分布?
经过多次测试,我发现: QR 码有效负载还取决于数据编码。如果您采用 UTF-8,QR 码看起来肯定与使用 Latin-1 (ISO-8859-1) 不同。如果您将 QR 码生成器设置为以相同方式编码数据,QR 码将看起来相同。
因此(对于符合标准的 QR 码)需要:
- 相同数据
- 相同的二维码版本
- 相同的面具图案
- 相同纠错级别
- 相同的二维码编码(数字、字母数字、字节...)
- 相同的数据编码(独立于二维码设置)
编辑: 正如 Mark Ambrazhevich 在此答案的评论中提到的,QR 码也可能依赖于以下内容,请记住这违反了 QR -代码标准(ISO/IEC 18004:2015):数据被插入QR-Code后,必须达到'filled up'的限制。根据标准,占位符 11101100
和 00010001
应该交替使用。但就像 Russ Cox 在 https://research.swtch.com/qart 上讨论的那样:
(post-terminator patterns) [...] Technically that's a violation of the spec, which prescribes a specific repeating 2-byte fill, but if all the readers you care about don't check the fill, then I agree it produces much nicer codes.
根据同一站点上的 Kevin Baker 的说法,许多商业 QR 码阅读器不检查 post-terminator-data。