跳到主要内容
QRCodeMax.Vip

二维码纠错等级 L、M、Q、H 详解

二维码自带 Reed-Solomon 纠错机制,分 L、M、Q、H 四档,约可恢复 7%、15%、25%、30% 的数据。本文说明各等级的适用场景、容错与图案密度的取舍,以及加 logo 为什么应选 H 级。

作者:QRCodeMax.Vip 5 分钟阅读

每个 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——最后一定要试扫最终的印刷成品。

常见问题

普通二维码应该用哪个纠错等级?
对大多数日常印刷用途,M 级是合理的默认选择。如果要在码上加 logo,或预计会有污渍和粗暴搬运,就选 H;只有空间或数据容量紧张、环境干净时才选 L。
更高的纠错等级能让二维码扫得更快或更远吗?
不能。更高的等级增加的是备份数据,不是扫码性能。它反而可能让扫码更难,因为同样的内容被塞进了更密、模块更小的图案里。
纠错能恢复一个缺了一角的二维码吗?
有时可以,但没有保证。那些恢复比例描述的是均匀分布在数据码字上的损坏,而撕裂造成的是集中损坏,还可能破坏定位方块这类任何等级都无法重建的结构元素。
二维码印出来之后还能改纠错等级吗?
不能。等级在生成时就已固定,并存储在码本身之中。要更改,只能重新生成一个码并替换印好的那个。
纠错等级会影响二维码能存多少数据吗?
会。等级越高,用于备份数据的部分越多,同一版本能装的内容就越少;否则生成器就得用更大、更密的版本来装下全部内容。