作者的前言
大家好啊,欢迎进入我的文章啊。今天开了个新坑:趣知识
好久没有更新文章,昨天打开简书才发现,我涨粉了。
我也算个简书的新人,距离上上个文章更新也是2019年了。
希望大家给我一个鼓励,求看完,求评论。
就这些,进入正题吧!
正文:二维码的前身——条形码
首先你至少要知道这些码的都表示二进制数(0与1),这些二进制数在扫描时会转换成字符串。另外,里面的竖线表示1,空白表示0。
竖线和空白都有 4 种宽度。最细的竖线代表一个 1,之后是两个 1,三个 1,最粗的竖线就是 4 个 1。对应的,4 种间隔宽度就是 0、00、000、0000。
每 2 条竖线加 2 条间隔就能表示一个数字,条形码的 48 条竖线和间隔就可以表示 12 位数字编号了。
而所有条形码都有一个启示码和终止码,它们都是一条竖线加一条空白加一条竖线(101)。它们有什么用呢?它可以确定条形码的最细宽度(确定一个1或一个0的长度是多宽),这样你把码打印成多大、多小,机器都能知道你扫描的数据。
如果扫反了怎么办?其实除了固定的启示码和终止码,还有一个组合是固定的,哪就是在中间的中间码,即01010。我们把中间码左侧的竖线里表里的白色变成黑色、黑色变成白色,放在分隔符右侧的编码。巧妙的地方在于,左侧所有组合里黑色的个数都是奇数 ,而右侧都是偶数。
这样,扫码器从左往右读取数据时只要发现一组数据里的 1 是偶数,那么就可以确认扫反了。用逆码表解读数字,再重新组合,就能得到正确编号。
最后,第十二位是根据前 11 位数计算出来的校验码,防止因为污渍而扫描成别的信息。
校验码公式:
回顾一下这种设计的好处:
1.起始码确定了最细宽度
2.中间码、把左边相反的数放到右边的组合防止了扫反的问题
3.校验码说明了数据无错
虽然这三重设计保证了条形码可以适应各种复杂的现实情况,非常可靠。但是它承载的信息太少,只能存储固定格式的数据,而且弄上了污渍只能检测出来,不能知道弄上污渍前的数据。毕竟超市的收银员如果发现数据错误,也会自己手动输物品编码(一般条形码下面都会打印物品编码),这种码运用的领域只能是超市,所以就出现了二维码。
附件:条形码的结构表
条形码结构表