为什么二维码破了还能扫出来?二维码的纠错秘密
TL;DR
从定位图案、数据容量和纠错等级解释二维码的容错原理,并提醒扫码成功不等于链接安全。
二维码不仅能编码网址和数字,还加入了定位图案与纠错信息。本文解释二维码为什么能容忍污渍和破损,以及为什么能扫出来不代表链接一定安全。

二维码看起来只是许多黑白小方块,但它真正厉害的地方不只是能装下网址和数字,而是即使被污渍遮住、边角破损,扫描器仍有机会恢复原来的数据。这个能力来自二维码设计时加入的冗余信息,也就是纠错码。
扫描器先要找到“方向”
二维码并不是把数据随便铺在一个方格里。三个角上的定位图案帮助相机判断二维码的位置、大小和旋转角度;内部的时序图案帮助扫描器估算每个小方块的网格坐标。即使二维码被拍得有些歪,扫描器也能先把它拉回一个规则的平面,再读取数据。
纠错不是“无限修复”
生成二维码时,可以选择不同的纠错等级。纠错等级越高,二维码里用于恢复数据的冗余越多,能够承受更大面积的污损;但代价是同样一段文字需要更多小方块,二维码可能变得更大、更密,也更难在小尺寸下扫描。
DENSO WAVE 的说明把常见纠错等级分为 L、M、Q、H,理论上可恢复的码字比例逐步提高。这里的“可恢复比例”不是说遮住二维码面积的一定百分比就一定能读出来,因为损坏位置、分布方式、打印质量、对焦和透视都会影响结果。连续的一条划痕和分散的小污点,可能带来完全不同的结果。
为什么二维码中心可以放 Logo
很多支付码或品牌码会在中心放一个小图标,看起来像是把数据遮住了。它们通常依赖更高的纠错等级,让一部分模块被覆盖后仍能恢复。但这不是 Logo 越大越好:遮挡过多、对比度不足、周围留白被破坏,都会让识别失败。
二维码四周的空白边也很重要,它帮助扫描器把二维码和背景分开。如果把二维码紧贴文字、图案或边框,哪怕黑白模块本身没有损坏,也可能让定位阶段失败。
能扫出来,不等于内容安全
纠错只负责“把编码的数据读出来”,不负责判断链接是否可信。二维码可能指向仿冒网站、诱导下载或付款页面。扫描前可以先查看域名和跳转提示,不要因为二维码来自熟人或贴在公共场所,就默认它安全。
二维码的核心取舍很简单:更多冗余换来更强容错,更高容量带来更密的图案。它并不是魔法,而是在有限空间里用额外数据换取可靠读取的工程设计。



