公众号旧文
为什么二维码的四角上,只有三个黑色方块?
这是胖子百科公众号的二维码,你一定发现了,二维码的四个角上,只有左上角和右上角还有左下角,有三个黑色方块,而右下角却没有,这是为什么?今天胖子就带你来了解一下。

很多人每天扫码,早就对二维码角落里的这几个大方块习以为常。乍一看,它们似乎只是为了对齐,但实际上,这三个方块在二维码里有一个非常正式的名字 Finder Pattern(定位探测图形)。它们并不是装饰,而是二维码能被机器快速识别的关键。
二维码诞生于1994年,由日本工程师 Masahiro Hara 设计出来。最初它并不是为了扫码支付,而是为了汽车工厂的生产线管理。当时的汽车制造已经非常自动化,一辆车从零件到整车需要经过大量装配环节,生产线上每天都要处理成千上万的零件。如果每个零件都靠人工记录,不仅效率低,还很容易出错。
在此之前,工厂主要使用传统的条形码,但条形码有几个明显的问题:第一是容量太小,能记录的信息有限;第二是扫描时必须对准方向;第三是如果条码被刮花或沾上油污,很容易识别失败。而在汽车生产线这种高速运转的环境里,这些问题都会被放大。
于是工程师们决定设计一种新的编码方式,让机器在复杂环境中也能快速识别。
如果你仔细观察二维码角落的定位方块,会发现它们并不是简单的黑白块叠加。无论从横向还是纵向穿过这个方块,看到的黑白结构大致都是一种特殊比例:
1 : 1 : 3 : 1 : 1
也就是说,从外向内看是:
黑 → 白 → 黑 → 白 → 黑
中间的黑块宽度是其他部分的三倍。
这个比例背后的思路非常简单:工程师需要一种在现实世界里很少自然出现的黑白结构。现实生活中充满各种图案,比如报纸文字、衣服条纹、建筑线条,如果二维码的标记太普通,扫描器很可能在这些图案里迷路。
而1:1:3:1:1这种结构非常独特,机器在扫描图像时只要检测到这种比例,就很容易判断这里可能是二维码的角。
中间那块做成三倍宽,也有很现实的原因。手机摄像头在扫描时,如果光线不好或者手稍微晃动,图像边缘就会变得模糊。如果每一段宽度都差不多,模糊后黑白边界可能会混在一起,算法就很难判断结构。但中间较宽的黑块相当于一个明显的核心标记,即使图像有点模糊,扫描器依然可以抓住这个特征。
同时,这种结构还有一个好处:不管你是横着扫、竖着扫,还是稍微倾斜着扫,只要扫描线穿过这个方块,比例大致都会接近1:1:3:1:1。也正因为如此,二维码不需要像传统条形码那样必须严格对准方向。
说完这三个方块,再回到文章最开始的问题:为什么右下角没有第四个大方块?
答案很简单,因为三个就已经够了。
在几何学中,只要知道三个点的位置,就可以确定一个平面的位置、大小以及旋转角度。二维码扫描器也是利用这个原理:只要找到左上、右上和左下这三个定位图形,就可以计算出整个二维码的方向和网格结构,然后再去读取里面的具体数据。
既然三个已经足够,工程师就没有必要再在右下角放一个同样的大方块。于是这块空间被留了出来,用来存放更多的数据和辅助信息。
二维码内部不仅存储了真实内容,还加入了大量纠错数据。当二维码的一部分被遮挡、刮花或者印刷不清时,扫描器仍然可以根据剩余数据把信息还原出来。
这也是为什么很多二维码中间可以放头像或Logo,甚至被刮掉一角仍然能够正常扫描。
请在微信客户端打开