![`qrcode` 包的实际限制是什么?](https://linux22.com/image/398770/%60qrcode%60%20%E5%8C%85%E7%9A%84%E5%AE%9E%E9%99%85%E9%99%90%E5%88%B6%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
该软件包的手册qrcode
中有一个名为“限制和注意事项”的部分,其中警告:
• QR 规范包括更有效地编码数字、字母数字或汉字数据的模式。此包尚未提供这些选项。
• QR 规范提供了将长数据串到多个 QR 码的方法。此包无法实现这种可能性。
我对如何使用二维码的理解还很浅薄,因此我并不清楚这在实际中意味着什么。这些限制对于我可能想用二维码做但做不到的事情意味着什么?
答案1
这两个限制都与二维码的存储容量有关。二维码通常用于编码(网站)网址,但它们也可用于存储任意数据,如数字、字符串、日语汉字字符序列(二维码是在日本发明的),或者只是一个字节序列。官方标准定义了不同的模式对于每种数据类型,指定每个字符的位数。这些模式允许简单数据类型(例如数字或拉丁字母数字字符串)更长,同时仍然可以使用其他模式对更复杂的数据进行编码。
在qrcode
包中,仅实现了二进制(字节序列)模式。因此,无法在单个二维码中表达非常长的数字或字符串,而如果实现了包含所有模式的完整标准,则可以实现这一点。当然,仍然可以使用二进制模式对数字、字符串或汉字进行编码,但最大大小会小一些。
举个例子:对于具有中等级别错误校正(这是该qrcode
包的默认设置)的 5 级(37x37 像素)的二维码,使用模式可以存储长度为 202 的数字、长度为 122 的字符串和长度为 84 的字节序列。使用该qrcode
包意味着数字和字符串的最大长度也将是 84,而不是 202/122。
考虑第二个限制:如果您要对无法容纳在单个二维码中的输入进行编码,则官方标准允许将输入拆分为多个二维码,这些二维码应逐个扫描,然后由读取器组合以恢复原始输入。但是,该qrcode
包未实现此功能。这意味着如果您有要编码的长输入,则您无法使用该包(或者在创建二维码并随后将其组合之前自己拆分输入)。
关于二维码的像素大小(即版本):该软件包会自动选择可以编码数据的最小尺寸,最高可达 40 级(177x177 像素)。此外,纠错功能也会自动调整:如果所需纠错级别的最小尺寸允许在更高的纠错级别下进行编码,则软件包将自动选择更高的纠错级别。
资料来源:qrcode
手册,维基百科(https://en.wikipedia.org/wiki/QR_code#Storage) 以及按模式、版本和纠错级别划分的 QR 码容量完整表格https://blog.qr4.nl/page/QR-Code-Data-Capacity.aspx。