二维码纠错等级详解:L、M、Q 和 H
二维码自带纠错能力,所以即使码的一部分弄脏、刮花或被遮住,也仍然能读出来。纠错分四个等级:L 最多能恢复约 7% 的数据,M 约 15%,Q 约 25%,H 约 30%。等级越高,越能在中间放 Logo 或印在粗糙的材料上,代价是图案更密。大多数印刷用的码,默认选 M 就好;加 Logo 时用 H。
纠错是怎么工作的
二维码使用里德-所罗门码(Reed–Solomon),和保护 CD 光盘数据、太空通信数据的数学方法同属一类。生成二维码时,会在内容之外附加额外的「修复」数据。如果有些模块(那些小方块)读不出来,扫码器就用修复数据把缺失的部分重建出来。附加多少修复数据,取决于你选的等级。
四个等级
| 等级 | 可恢复 | 适用场景 |
|---|---|---|
| L | 约 7% | 干净的数字场景,比如显示在屏幕上的码;让图案尽可能简单 |
| M | 约 15% | 印刷码的理想默认值 |
| Q | 约 25% | 可能被磨损或印在粗糙材料上的码 |
| H | 约 30% | 中间有 Logo 的码,或用在恶劣环境里的码 |
这些百分比是指码的数据最多可以缺失多少仍能解码。它们是理想损坏情况下的上限;实际中,如果损坏的位置不对,比如盖住了角上的三个大方块,即使没到上限,码也可能失效。
代价:密度
修复数据越多,同样的内容需要的模块就越多。把等级从 L 提到 H,可能让码升高好几个版本,也就是行列更多、方块更小。在印刷尺寸固定时,方块越小越难识别。所以等级高并不自动更好:它是一份要占用空间的保险。
如果既要 Logo 又要印得小,就缩短内容。动态二维码里只存一个短链接,能给高纠错等级留出余地,又不会让方块变得很小。
Logo 与纠错
中间的 Logo 是故意遮住了一部分模块。高纠错等级(Q 或 H)能弥补被遮住的区域,但只在它的上限之内。把 Logo 控制在码宽的五分之一左右或更小,放在正中、远离角上的三个大方块,并且一定要扫一下打样。如果扫不出来,先缩小 Logo,再考虑调其他设置。
怎么选等级
- 码显示在屏幕上,干净且够大? L 或 M。
- 印在纸上,用在室内? M。
- 印在纸板、布料、瓶子或任何会被磨损的东西上? Q。
- 要加 Logo? H,配一个不大的 Logo,并且测试。
- 要印得很小? 用 M,内容尽量短,而不是用 H 配一个很密的图案。
尺寸和等级同样重要:印刷尺寸指南按扫码距离给出了最小宽度。
其他值得了解的上限
一个二维码最多能存约 7,089 个数字、4,296 个字母数字字符或 2,953 个字节,而且只有在最低纠错等级下才能达到。实际上,超过几百个字符的码,在普通印刷尺寸下用手机就很难扫,这也是应该链接到一个页面、而不是把文字直接放进码里的另一个原因。
常见问题
我该用哪个纠错等级?
大多数印刷码用 M。加 Logo 或预计会磨损时用 H,只有干净、够大、显示在屏幕上的码才用 L。
纠错等级越高,二维码越好扫吗?
不一定。当码的一部分会被遮住或损坏时,它有帮助;但它会让图案更密,印得小的时候反而更难识别。根据场景选等级,而不是选最高的那个。
为什么我加了 Logo 的二维码扫不出来?
很可能是 Logo 太大,或者盖住了关键区域。把它缩到码宽的五分之一左右或更小,挪到正中,使用 H 等级,加大码的印刷尺寸,再测试一次。如果还是不行,就排查一下其他常见原因。