每个 QR 码都自带一份"保险":Reed-Solomon 纠错机制,即使图案的一部分被污损、刮花或遮挡,扫码器也能把数据还原出来。这份保险分四档——L、M、Q、H——分别能恢复大约 7%、15%、25%、30% 的数据。选哪一档是一种取舍:容错越强,留给内容的空间就越小,或者图案越密集、越难扫。
纠错到底在做什么
QR 码不只是你看到的黑白格子。除了数据本身,码里还存有一份冗余的备份信息,由一种叫 Reed-Solomon(里德-所罗门)的编码算法生成——CD 和数字广播长期使用的纠错技术就属于同一个家族。扫码器读取时,收到的内容可能有误或有缺失:指纹把黑模块变成白的,一道划痕抹掉了一行,油墨褪色了。Reed-Solomon 让扫码器能发现这些损坏,并用数学方法把缺失的部分重建出来。印刷出来的码本身没有任何变化,恢复完全发生在解码软件里。
纠错等级在生成时就已固定。它记录在码的格式信息里,扫码器会最先读取这部分,所以每个标准扫码器都知道该预期多少冗余。码生成之后无法调高或调低等级——唯一的办法是重新生成一个码,替换掉旧的。
四个等级:L、M、Q、H
QR 标准定义了四个等级,用字母表示:
- L(Low,低): 约可恢复 7% 的数据。
- M(Medium,中): 约 15%。
- Q(Quartile,四分之一档): 约 25%。
- H(High,高): 约 30%。
只有 Q 打破了首字母的规律,"quartile"(四分之一)对应的正是它约四分之一的恢复量。
有两点需要澄清。第一,这些百分比并不是指码可以损失 7% 或 30% 的表面积。它们针对的是码字(codeword)——构成 QR 码的数据单元——而恢复效果很大程度上取决于损坏落在哪里。第二,这些数字是近似值,描述的是该机制在有利条件下能恢复多少,并不是保证。如果损坏破坏了结构性元素,比如三个角上的大定位方块或它们之间的时序图形,任何等级都救不了这个码,因为这些部分不像数据那样有备份。
这些百分比对手脏、破损的印刷品意味着什么
现实中的损坏分两类,表现截然不同。
分散的轻微损坏——指纹油污、溅上的咖啡、轻微褪色、日常拿放的磨损——会破坏散布在许多码字里的比特。这正是 Reed-Solomon 最擅长处理的情况。M 级通常能完全扛住;L 级可能已经吃力,因为它的 7% 预算很快就用完了。
集中的重度损坏——撕掉的一角、贴在码上的贴纸、打孔、深划痕——是更棘手的情况。局部损坏会一次性抹掉同一区域连续的码字,所以一个远小于 30% 面积的破损也可能毁掉 H 级的码,尤其是碰到定位图形的时候。把这些公开的百分比理解为"针对均匀分布损坏的描述",而不是"保证能扛住中间一道撕裂"。
还有一点值得知道:无论哪个等级,纠错都修不了这些问题——模糊、对比度差、反光、镜头脏污,或者缺少静区(码四周的留白)。这些是采集问题,不是数据丢失,再多的冗余预算也无济于事。
Logo 与美化:为什么 H 是标准选择
把 logo 放在 QR 码中央,等于故意遮挡模块——在码还没进打印机之前,你就先花掉了损坏预算。用 L 或 M 级是赌博;用 H 级,约 30% 的冗余留出了足够余量,一个适度的 logo 可以安全地放在正中央。这就是为什么带 logo 的码几乎都用 H 级生成。
给码加 logo 的实用经验:
- logo 要小——常见建议是不超过码宽的四分之一。
- 绝不要遮挡三个定位方块或静区。
- logo 背景选实色、不透明,避免半透明——半透明会干扰黑白判读。
- 先试扫印刷打样,而不是只扫屏幕上的版本,然后再批量印刷。
其中的原理值得了解:扫码器读取 logo 周围的图案,由纠错机制重建被遮住的模块。如果 logo 太大,恢复预算耗尽,码就直接失效——尽管在肉眼看来一切正常。
取舍:容错与密度的博弈
冗余数据总要占地方,取舍就体现在这里。同样的内容,等级越高,用于备份的码字越多,会带来两种结果之一。
第一,同样尺寸下留给内容的空间更少。H 级生成的码能装下的文字明显少于 L 级的同一版本,所以较长的网址或信息可能干脆装不下。
第二,图案更大更密。如果内容装不下,生成器会把码升一个版本——格子里的模块更多,同样印刷尺寸下每个模块就更小。更小的模块要求更清晰的印刷、更近更稳的扫码。一个在中等尺寸 L 级码里轻松容纳的长网址,换成 Q 或 H 级后,在同样物理尺寸下会明显更密,印在名片上可能就是"轻松扫出"和"扫不出来"的差别。
反过来也成立:给一个干净的屏幕码选 H 级几乎毫无收益。屏幕不会脏,而密度代价是实实在在的。等级要匹配码将面对的真实环境。
怎么选:实用指南
- L —— 干净、可控的环境,内容短:屏幕上的码、可以把码印得很大的大幅标牌,或者需要在最小尺寸里塞下最大容量的时候。
- M —— 日常印刷的合理默认值:传单、菜单、宣传册、讲义。容错与密度的良好平衡。
- Q —— 会被频繁拿取的公开印刷品:票券、包装、货架标签,一切容易磨损或沾染轻微污渍的东西。
- H —— 恶劣或肮脏的环境、粗暴的搬运、布料或低质量印刷,以及任何要加 logo 的码。
拿不准时:普通码选 M,带 logo 的码选 H。大多数生成器——包括 QRCodeMax.Vip——都允许在下载前设置等级,所以生成两个版本对比大小和可扫性没有任何成本。
值得避免的常见错误
- 以为 H 级能让扫码"整体更好"。它增加的是冗余,不是识别距离或速度;一个过大过密的 H 级码可能比一个更大更稀疏的 M 级码更难扫。
- 遮住静区或定位图形,还指望纠错来补救。它做不到。
- 为了让码小一点选 L 级,结果还是印得很小。印刷尺寸和对比度造成的扫码失败,远多于一个适中的纠错等级。
- 跳过试扫。等级在成品码上看不见,验证的唯一办法就是扫——最好扫一份经过揉搓、擦拭和实际拿放的打印件。
结论
纠错等级是"结实"与"密度"之间的一个旋钮。L 级约能恢复 7% 的受损数据,M 级约 15%,Q 级约 25%,H 级约 30%,每升一档都要付出数据容量或图案尺寸的代价。日常印刷选 M,带 logo 和恶劣环境选 H,只有空间紧张、环境干净时才选 L——最后一定要试扫最终的印刷成品。