Qraft

二维码能存多少数据?了解数据量的极限

二维码的最大容量

二维码可存储数据量的上限出现在最大尺寸的版本 40(177×177 模块):数字 7,089 位、英数字 4,296 个字符、二进制数据 2,953 字节、汉字(Shift JIS)1,817 个字符。

仅以数字比较,一般条形码EAN-13)只能存放 13 位,二维码的信息量超过它的 500 倍。

不过这些都是把纠错级别设为最低的 L 时的数值。实际最常用的级别 M 只有 L 的八成左右(数字 5,596 位、二进制 2,331 字节),纠错能力更强的级别 H 更降到四成左右(数字 3,057 位、二进制 1,273 字节)。估算容量时,请以自己实际使用的纠错级别下的数值为准,而不是以上限值为准。

各用途的数据量参考

下面以纠错级别 M 为前提,列出常见用途大致需要多少数据量。括号内是能容纳该数据量的最小版本与模块数。

  • 短网址(例如 https://example.com):19 字节。因含有小写字母而按字节模式处理,版本 2(25×25 模块)即可容纳
  • 带参数的网址:约 100 字节对应版本 6(41×41 模块),即使加上追踪参数达到 200 字节,版本 10(57×57 模块)也能容纳
  • Wi-Fi 连接信息:含 SSID密码约 50-80 字节,版本 5(37×37 模块)以内即可
  • vCard(联系人信息):姓名、电话、邮箱、地址都写入时约 200-500 字节,落在版本 10 到 17(57×57 到 85×85 模块)之间
  • 长篇文本:日文以 UTF-8 字节模式存储时每个字符占 3 字节,因此几百个字符就会让版本大幅上升,图案变得细密

数据量增多后二维码会如何变化

二维码有版本 1 到版本 40 的规格,版本 1 每边 21 个模块(黑白单元格),版本 40 每边 177 个模块,每升高一级,纵横各增加 4 个模块。存储的数据增多时,会自动选择能容纳它的最小版本。

版本升高带来的麻烦在于,如果打印尺寸不变,单个模块就会变小。以 2 cm 见方打印为例,版本 2 的一个模块是 0.8 mm,版本 10 则只有约 0.35 mm(未计入四周空白区的简单计算)。模块越小,越容易受到相机分辨率与油墨渗透的影响,读取错误也会增多。

因此,与其把长篇文字直接塞进码中,不如只存储网页的网址,让读者在链接页面查看详情,这样更可靠。至于各用途该选哪个版本,也就是版本差异的判断方法,我们在另一篇文章中单独说明。

与纠错级别的权衡

QR 码具有即使有污损或缺失也能读取的纠错机制,其强度可从四个级别中选择。纠错级别越高,用于恢复的冗余数据越多,因此同样尺寸的码中能存储的实际信息量就越少。在户外招牌等易脏的场所,高级别更令人安心,但相应地会消耗容量。反之,若只是在室内放一个短网址,低级别便已足够。需根据用途,选择优先考虑坚固性还是容量。

因字符种类而异的容量差

QR 码能存储的字符数,会因放入的数据种类而变化。仅数字的数据收纳得最高效,按英数字、汉字、含其他符号的数据顺序,同样尺寸下能容纳的字符数依次减少。这是因为每种类型表示一个字符所需的数据量不同。含大量符号的长网址出乎意料地占用容量,正是源于这一机制。想节省容量时,减少不必要的符号、尽量采用简单的字符构成,是有效的做法。

实际试一试来确认

要掌握容量的感觉,最快的办法是一点点改变内容再生成,然后放在一起比较。做下面三组,就能看清究竟是什么把版本推高的(以下均以纠错级别 M 为例)。

  • 只改变纠错级别:把同一个网址分别用级别 L 和级别 H 生成,内容相同但 H 的版本更高,图案也更细密
  • 短网址与带追踪参数的网址:19 字节的那个用版本 2(25×25 模块)即可容纳,加上 utm_source 等参数达到 120 字节后则需要版本 7(45×45 模块)
  • 纯数字字符串与含符号的字符串:同样是 100 个字符,纯数字可以放进版本 3(29×29 模块),混入符号后转为字节模式,就要用到版本 6(41×41 模块)

生成好的码属于哪个版本,数一数一边的模块数就知道:用纵横的模块数减去 21,再除以 4,然后加 1,得到的就是版本(57 个模块就是版本 10)。最后再按实际使用的尺寸打印在纸上,确认能否从预期的距离读取,这样就能避免打印后读不出来的失败。

减少数据量的技巧

保持二维码紧凑的技巧。

  • 使用短链接服务:用 bit.ly 等缩短长 URL,二维码会变小
  • 删除不必要的参数:将 URL 末尾的追踪参数(utm_source 等)控制在最低限度
  • 利用字母数字模式:含小写字母的一般 URL 会以字节模式(每字符 8 比特)编码。字母数字模式只能处理数字、大写 A-Z、空格和 9 种符号,但只要能收进去,每字符只需 5.5 比特
  • 信息放在网页上:二维码中只存储 URL,详细信息写在链接目标页面上

正确理解二维码的容量限制,就能事先避免「数据装不进去」这类麻烦。先确定要印多大、在什么环境下扫描,再反推允许的数据量,是最稳妥的顺序。