1

问题

QR 码显示的字符串有(标准)大小限制。典型限制:

  • 版本-1 -L-字母数字的二维码:25 个字符
  • 版本-1-M-字母数字的二维码:20 个字符

还有一些软件工具可以将输入字符串转换为相应二维码符号的图像。这些工具必须遵守标准限制......但是当您测试这些工具中的任何一个时,它们不尊重......

他们不同意 ISO 标准限制?有“另一个ISO”吗?使用最大尺寸时是否存在错误符号无法解释的风险

背景(2013-09)和解释

在处理这个问题时,我遇到了一个新问题:每个工具对每个QR-Code-Version的字符串中的大小限制都有不同的选择。

如果所有QR-Code 生成工具都符合“QR-Code 标准”、ISO/IEC 18004:2006表 7、“符号字符数和输入数据容量”;所有工具都必须按照 ISO 标准的规定渲染符号。例子:

  • 字符串HTTP://BIT.LY/1234567890有 14+10=24 个字符,因此 24<25,是Alphanumeric Mode -L Version - 1的最大值。

  • 字符串HTTP://BIT.LY/12345有 14+5=19 个字符,因此 19<20,是字母数字模式- M版本- 1的最大值。

    • googleapis/chart/qr1234正常,但12345失败。

    • api.qrserver1234可以(好!),123456也可以(仍然是版本-1),但是1234567失败,因为当有 14+7=21>20 个字符时不会更改为版本2。

...等等,还有许多其他 QR 码生成器(例如phpqrcode失败更多!)和版本 1 限制。

这是一个普遍的错误?或者我的期望(关于标准合规性和二维码生成器行为)是错误的?

PS:到目前为止,在我看来,工具中缺乏(ISO)标准合规性。


词汇表

  • 二维码生成工具:任何在线或离线软件工具,可生成字符串二维码,提供输入字符串和一些参数(通常是版本、EPS、字符集和图像大小)。

  • 可编码字符集

    • 8 位字节数据(二进制):一套完整的 UTF-8 或 ISO 8859-1 字符集。Binarytools的常用默认字符集,带有 UTF8 选项。

    • 字母数字数据:一组 ASCII 44 个字符(数字0-9;大写字母A-Z;其他九个字符:(空格)、$ % * + - . / :)。通常工具没有此选项,而是“自动检测”行为,如果字符串为 UPPER CASE,则字符集设置为字母数字。

  • ECL:二维码的纠错等级。ECL-L(低)为 7%,ECL-M(中)为 15%。

  • 版本1-L QR 码符号:21 行和低 (L) ECL 的符号。编码字母数字数据时,编码字符串的最大长度为 25 个字符。

  • 版本1-M QR 代码符号:具有 21 行和中等 (M) ECL 的符号。编码字母数字数据时,编码字符串的最大长度为 20 个字符。

参考

ISO 标准表 7 的其他链接(副本和解释):

4

1 回答 1

5

QR 码有一个(不是过时的)ISO 规范,ISO 18004:2006。你观察到的大部分只是缺乏合规性。但是您缺少的规范的一小部分也解释了差异。

首先,为什么其中一些似乎对版本和 EC 级别的信息编码太少?只是一个错误。

例如,Google Chart 的实现已经很老了,没有维护,不推荐使用,而且我知道它有一些错误。它是2008 年http://code.google.com/p/zxing中编码器的基础,我知道我们很久以前就修复了这样的问题。zxing 不会在您的测试中“过早”切换到下一个版本。

那么如何在版本 1 QR 码api.qrserver中获取太多信息呢?您忽略了可以在一个二维码中切换模式以进一步节省字节。对于结束字符串的数字,此生成器会切换到数字模式,并最终保存足够的内容以仍然适合版本 1,EC 级别 M,有 21 个字符。

这是合法的,尽管不需要优化。为整个字符串选择字母数字模式也是完全有效的,但在某些情况下不会产生最短的编码。

于 2013-09-14T14:25:34.003 回答