二维码背后不能不说的秘密Part1~

导读

查看信息、添加好友、扫码支付、二维码在生活中的应用愈发广泛。但我们在扫码时,又是否考虑过二维码是如何储存信息,又是如何能被准确识别的?那么本期将带你了解二维码背后的秘密。

本系列文章

Part1:一维码中储存在黑白之间的二进制信息

part2:以QR码为例,二维码储存了哪些信息?

part3:二维码被破坏也能识别?——里德-所罗门码

一维码的诞生

在讲二维码之前,不得不说先说一下其前身一维码,即条形码。

一维码诞生在 20 世纪 20 年代美国西屋电气公司的实验室里,这是一家世界著名的电工设备制造企业。有一位性格古怪的发明家名,约翰·科芒德,异想天开地想对邮政单据实现自动分检,于是发明了最早的条形码。其中,一个「条」表示数字 1,二个就表示数字2 ,以次类推,同时还发明了条码识读设备。

但科芒德码所包含的信息量太低,并且很难编出 10 个以上的不同代码,后人又在他的基础上对条形码实施了改进。 1949 年,专利文献中第一次出现了诺姆·伍德兰和伯纳德·西尔沃发明的全方位条形码符号的记载,这种初代的条形码采用环形设计,就像射箭的靶子一样。它的应用使收银员的工作效率得到高效,为顾客节省了时间。

下面将以UPC码为例,探讨一维码背后的秘密。

一维码背后的秘密

以UPC码为例,本质上就是三十条粗细不一的黑线。 而黑色竖线和白色间隔的宽度就是隐藏在条形码里的二进制信息。
竖线和间隔均有四种宽度,最细的黑线代表一个 1,其次是两个 1,最粗的竖线代表四个1;对应的四种间隔代表了 0,00,000 与 0000。
对应的我们就可以得到其二进制信息。如下图蓝框内便是 0110001,根据编码表代表 5 。每两条竖线加两条间隔就可以表示一个数字。总计共 12 位数字和 48 个竖线间隔。 其中 10 位为数据码,一位为系统码,另外一位为校验码。
除了上述的 48 条竖线与间隔,剩下的为最左侧的起始码,最右侧的终止码。 其为条形码的固定开头,代表101。其意义在于使扫码器知道整个条形码的最细宽度,从而可知道其他宽度代表的数字, 这样条形码不管以什么样的尺寸印刷都可完成识别。
其中, 系统码和左侧数据码构成了厂商识别代码,右侧数据码构成了商品项目代码。而前缀码用以标识商品类别,其字符一般为 0,6 或 7。 而其中的校验码是通过前 11 位数计算出的,以防止信息篡改。以UPC-A为例,其校验码计算步骤如下。自左至右取数设为N1至N11。
通过以上方法,我们通过扫描条形码就可以知道其生产厂商和产品信息。但如何保证扫码器能够准确扫描? 如果扫码器扫反了该怎么办?我们将下图左侧的 1 变成 0,0 变成 1,就可以得到右侧的编码表。 可以看到左侧所有组合1的个数都为奇数,右侧为偶数。当扫码器读取数据时只 要发现一组数据里 1 的个数为偶数,那么就可确认扫反了。 用逆码表解读数字再组合便可以得到正确的信息。
但条形码本身具有局限性, 首先其能够承载的信息过少,其次若条形码部分出现磨损、毁坏会导致无法正确读取。所以以矩阵形式的二维码出现了。下期将带大家探究二维码背后不能不说的秘密。