容错率是什么?L/M/Q/H 四档怎么选
二维码有个很聪明的设计:数据不是只存一遍,而是通过 Reed-Solomon 纠错算法做了冗余。就算码面有部分破损或被遮挡,扫描器仍然能把数据恢复出来。容错率就是告诉你「最多允许坏掉多少还能读」。
| 等级 | 可恢复数据 | 适用场景 |
|---|---|---|
| L(Low) | 约 7% | 屏幕展示、短链接、环境干净 |
| M(Medium) | 约 15% | 通用场景,大多数库的默认值 |
| Q(Quartile) | 约 25% | 印刷品、可能有轻微磨损 |
| H(High) | 约 30% | 工业环境、要加 Logo、可能被遮挡 |
容错率越高,同样的数据需要的码点就越多,二维码也就越密。所以不是无脑选 H 就好——如果你的内容很短、环境又干净,选 L 反而生成更稀疏好扫的码。
实际建议:网页上的二维码选 M,印刷在名片或海报上的选 Q,要往中间放 Logo 或者贴在可能被磨损的包装上选 H。
版本 1-40 和数据容量的关系
QR Code 的「版本」不是软件版本,而是尺寸规格。Version 1 是 21×21 的模块矩阵,Version 2 是 25×25,以此类推,每升一版边长加 4 个模块,到 Version 40 就是 177×177。
版本越高,能存的数据就越多。但要注意容量跟两个因素有关:内容类型和容错率。
| 内容类型 | Version 1(最小) | Version 40(最大) |
|---|---|---|
| 纯数字 | 17 个 | 7,089 个 |
| 字母数字 | 10 个 | 4,296 个 |
| 字节(含中文) | 7 个 | 2,953 个 |
以上是容错率 L 时的最大容量。容错率调到 H,容量大约要打六折。所以如果你发现生成的二维码很密、不好扫,可以试试把容错率从 H 降到 M,同样的内容用更低的版本就能装下。
内容太多二维码太密怎么办
二维码太密的根本原因是数据量大、版本高,每个模块(码点)就变得很小。解决思路有两个方向:
方向一:减少数据量。 如果编码的是 URL,用短链接服务把长 URL 缩短。一个 200 字符的 URL 缩到 20 字符,版本可能直接从 10 降到 3,码点密度肉眼可见地变稀疏。
方向二:降低容错率。 从 H 降到 L,同样的数据能用更低的版本。代价是抗损能力变弱,但如果只是屏幕展示就无所谓。
方向三:换码制。 如果数据量大又需要小尺寸,可以考虑 Data Matrix。它在小面积上编码的效率比 QR Code 更高,电子元器件上标刻的二维码很多就是 Data Matrix。
二维码为什么扫不出来
这是很多人遇到的问题。常见原因排个序:
- 对比度不够。 深色码点配浅色背景是基本要求。白底黑码效果最好。如果用了浅灰底配深灰码,人眼看着有区别,扫码器可能分不出来。
- 码点太小。 打印出来的二维码每个模块小于 0.5mm,很多手机摄像头就难以对焦。屏幕上的二维码如果尺寸小于 100×100 像素,也可能扫不了。
- 静默区被破坏。 二维码周围至少要留 4 个模块宽度的空白边框(叫 Quiet Zone)。很多人排版时把文字紧贴着二维码,或者背景有图案,静默区就废了。
- 反光和阴影。 印在亮面纸上的二维码,灯光一照反光就扫不了。这种情况建议用哑光材质。
- 容错率太低又被遮挡。 选了 L 容错率,结果贴标签时蹭掉了一角,数据就恢复不了了。
QR Code vs Data Matrix vs Aztec
这三种都是二维码(2D barcode),但各有侧重:
| 码制 | 特点 | 典型场景 |
|---|---|---|
| QR Code | 最普及,支持中文,有定位图案 | 支付、电子票、网页链接 |
| Data Matrix | 小面积编码效率高,抗损强 | 工业标刻、电子元器件、药品 |
| Aztec | 不需要静默区,中心有finder pattern | 登机牌、火车票 |
日常使用基本选 QR Code 就对了。Data Matrix 更多出现在工业场景,Aztec 在交通票务领域比较常见。如果你做的是给普通用户扫的码,QR Code 的识别率最高——毕竟每个手机都预装了 QR Code 扫码器。
常见问题 FAQ
二维码容错率选 L 还是 H?
看场景。纯数字短链接选 L(7%)就够了,码点更稀疏好扫。如果要印在包装上、可能被磨损或遮挡,选 H(30%)更保险。拿不准就选 M(15%),这是大多数库的默认值。
二维码内容太长导致太密扫不了怎么办?
两个方向:一是缩短内容,用短链接服务把 URL 变短;二是降低容错率从 H 改成 L,同样版本能容纳更多数据。如果还是不行,换用 Data Matrix,它在小面积内容纳数据的能力更强。
二维码中间放 Logo 会影响扫描吗?
可以放,但 Logo 面积别超过整个二维码的 30%。QR Code 的容错机制允许部分数据丢失还能恢复。做法是容错率设成 H(30%),这样 Logo 覆盖中间区域后仍有足够的冗余数据来解码。
同样的内容为什么不同工具生成的二维码不一样?
因为参数不同。容错率、版本(是否自动选最小版本)、掩码图案的选择都会影响最终码面。只要参数一致,同一个内容生成的二维码是一样的。掩码图案是 QR Code 标准里的一个步骤,用来让黑白分布更均匀,算法会自动选最优的那个。