为什么二维码里面有三个大方块?
为什么⼆维码⾥⾯有三个⼤⽅块?
为什么超市售货员扫⼀下条形码就能结账?为什么别⼈扫⼀下你的⼆维码就能加上你的?⼩⼩的条形码、⼆维码中究竟如何蕴藏如此多不同的信息?今天,就让我们和孩⼦们⼀起⾛进条形码、⼆维码的世界吧!
撰⽂ | 吴进远
我们前⼀篇⽂章讨论了摩尔斯电码,谈到它对当代的计算机技术有着深刻的影响。这种影响并不是在具体的编码⽅法上,⽽主要是体现在思维⽅法上。
现在我们购买到的⼤多数商品,包装上⾯都有条形码。条形码初期存在多个发明,现在也存在⾮常多的变种。条形码可以算是和摩尔斯电码沾点边,因为早期的⼀位发明家曾经受到过摩尔斯电码的启⽰。确实,从某种意义上说,我们可以想象把摩尔斯电码的点和划,垂直画成线,变成窄和宽的条纹。当然现在主流应⽤上的条形码,并不是简单地从摩尔斯电码转换来的。
条形码世界
qq公告大全今天,计算机越来越多地参与着我们⽣活的⽅⽅⾯⾯。为了把信息迅速⽅便地送⼊计算机,⼈们设计了各种各样的编码,条形码就是其中的⼀种。其他的编码⽅法,⽐如RFID,尽管成本越来越低,但相⽐之
下,条形码仍然是最便宜的,其成本⼏乎为零,因为条形码只需要⽤油墨印在包装盒上即可。
条形码是怎样将信息编码的呢?对于不同的应⽤存在许多标准。我们这⾥介绍⼀下其中⼀个标准,即GTIN-13以及它所对应的条形码编码标准EAN-13。GTIN是Global TradeItem Number的意思,其中的GTIN-13标准是⽤13位数字代表全球贸易中的万物。其中最⾼的三位代表⽣产物品的国家,⽐如中国⽣产的产品前三位是690-695。其余⼀些位数表⽰地域,⾏业等信息,靠后的⼀些位数是物品的代码。如果13位数全部⽤满,可以表述10万亿种不同的物品,⾜够全球所有⼈每⼈研发1000种不同的商品。
我们现在在市场上买到的商品,⼤部分都有这样⼀个13位数的代码。GTIN兼容了国际标准书号(ISBN),国际标准期刊序号(ISSN)等等。当GTIN-13需要印刷成条形码的时候,使⽤的是EAN-13条形码标准。
⽐如作者参与写作的⼀本科学普及书的条形码,如下图所⽰。对于图书,不管是哪个国家出版的,其前三位都被指定为978或979。⽽杂志期刊等,前三位总是977。
⼤家可以仔细观察上⾯的条形码,我们可以看到数字5出现了⼏次,不过它们似乎长的不完全⼀样,在左边的两个是⼀个样,⽽在右边的两个显然不同。如果认真看看,左边与右边条纹是“⿊⽩颠倒”的关系。可是,再看看左边出现的两个7,它们似乎也不⼀样。此外,在条形码左边与右边各有6位数字,
这并不难理解,但整个码符号的最左边那个9是怎么来的?难道可以⽆中⽣有吗?
为此,我们需要了解⼀下EAN-13(包括ISBN,ISSN,UPC等)条形码的⽣成规则。
条形码的编码规则
EAN-13条形码是⽤两个条纹来表⽰⼀个数字的,整个码包括13个数字,其中直接编码12个,左边6个右边6个,第13个⽤后⾯介绍的⽅法隐含编码。条形码两边与中间安排了起始符(S)中间符(M)以及结束符(E),各为两个窄条。因此,所有码,不管具体数字是什么,都包含有30个条纹。
那么,每个数字⼜是怎样⽤两个条纹表⽰的呢?这就需要我们在更细尺度上讨论。每个数字的两个条纹,包括了两⿊两⽩四个区域,它们的总宽度为7个单位宽度。这个单位宽度可以根据印刷精度⾃由选择,⽐如当我们把单位宽度选定为0.5毫⽶时,每个数字所占宽度为3.5毫⽶。
对于左边6个数字,每个数字的左边⼀定是⽩的,⽽右边⼀定是⿊的。每个数字从左到右都是“⽩⿊⽩⿊”地构造。这样,当⼏个数字⼀个个紧挨在⼀起的时候,它们之间就可以存在⼀个清晰的边界。
了解了这些,我们就可以想象⾃⼰是当年制定这种条形码的设计师,很容易地数⼀数可⽤的编码有哪些。
我们可以把7个单位宽度组合在⼀起,看成7个⽐特的⼆进制数。如果这7个⽐特可以任意安排⿊⽩,则可以表达128个
我们可以把7个单位宽度组合在⼀起,看成7个⽐特的⼆进制数。如果这7个⽐特可以任意安排⿊⽩,则可以表达128个字符。不过我们已经限定最左边⼀定是⽩⾊,最右边⼀定是⿊⾊,这样就只有中间5个⽐特可以改变,或者说最多可以表达32个字符。把这32个可能的字符全部画出来,就得到下⾯这个图。
现在,我们把不符合“⽩⿊⽩⿊”要求的字符去掉,还剩下20个可⽤的字符。这20个字符⼜可以分成两类,⼀类包含有奇数个(3个或5个)单位宽度为⿊,共10个,另⼀类包含有偶数个(2个或4个)单位宽度为⿊,也是共有10个。我们把这两类字符分别⽤来作为0-9数字的代码。其中奇偶性为奇的10个称为EAN-L码,在上⾯图中⽤浅棕⾊标注。奇偶性为偶地10个称为EAN-G码,在上⾯图中⽤浅绿⾊标注。这两种左边的条形码如下图所⽰。
那么,右边的条形码⼜是什么样的呢?我们希望最终的条形码具有⼀定的对称性,⽐如希望右边的码左⿊右⽩,这样可以与结束符(E)有⼀个清晰的边界。因此最简单的⼀个做法,是把EAN-L码⿊⽩颠倒,这样我们就有了EAN-R码,如下图所⽰。显然,由于EAN-L的奇偶性为奇,因此很容易看出EAN-R的奇偶性为偶,⾥⾯⿊条的总宽度为偶数个单位宽度,与EAN-L正好反过来。
有了左边与右边数字的条形编码图形,我们就很容易拼接出⼀个完整的条形码。当我们只需要编码12个数字时,也就是说当13位数中最⾼位为0时,左边6个数字都⽤EAN-L码,右边6个数字则⽤EAN-R码。把数字与S,M,E符拼接在⼀起后,我们就可以得到如下图所⽰的条形码。
我们前⾯问过⼀个问题,在13位编码的整个条形码码符号的最左边那个数字(我们前⾯图书的条形码中的9)是怎么来的。此外,⼤家还会问,我们前⾯谈到的EAN-G图形能不能⽤在条形码的左边,代替EAN-L码?实际上,这两个问题是联系在⼀起的,EAN-13中,最左边那个数字,就是利⽤EAN-G图形,代替左边6个数字中⼀部分EAN-L图形来表述的。
在条码左边6个数字中,每个数字可以选⽤L或者G两种码。因此通过选择每⼀位的L或G,⼀共可以得到64(2的6次⽅)种组合。⼈们从这64种组合中,挑出了10个组合,⽤来表述13位编码中的最左边那个数。这10个组合以及它们代表的数字为:
0=LLLLLL;1=LLGLGG;2=LLGGLG;3=LLGGGL;4=LGLLGG;5=LGGLLG;6=LGGGLL;7=LGLGLG;
8=LGLGGL;9=LGGLGL。
这样⼀来,最左边这个数不需要直接⽤⼀个单独的图形表述,⽽只需要通过选配左边6个数字编码图形的L或G组来“隐喻”。
电脑网速太慢怎么办
现在我们再回过头看我们前⾯那本书的条形码,原来的⼀些疑问也就豁然开朗了。
⾸先,右边的两个5与左边的两个5⾃然不会是相同的,我们知道 EAN-L 与 EAN-R 对应的10个编码,是⿊⽩反转的关系。那么,同在左边的相同数字编码⼀样吗?不⼀定。⽐如上⾯条码中左边的两个7,它们⼀个是 L 码另⼀个是 G 码。因为这个条码编码了第13位数字9,因此左边6个数字的L或G的选择为9=LGGLGL,因此它的第⼀个7是L⽽第⼆个7是G,所以这两个7长得不⼀样。此外,我们还可以看出左边的两个5恰好都是L,否则它们也未必相同。
条形码带给我们的启⽰
好听帮派名字在很多编码⼯作的实践中,我们的着眼点是提⾼编码的效率。也就是说,利⽤尽量少的资源来存储或者传输⽐较多的信息。但是在设计条形码的时候,更需要考虑的,是可靠性和准确性。为此,我们可能会“浪费”⼀些编码资源,来提⾼编码的冗余度。
在前⾯谈到的条形码中,每个数字的编码空间有7个单位宽度,如果充分利⽤可以编制128个字符。但是我们对编码空间作了限制:(1)左⽩右⿊,(2)包含两个条纹。这样⼀来,这个编码空间中就只剩下20个可以⽤的组合了。但是这样做带来的好处⾮常多。⾸先是两个数字挨在⼀起,它们之间存在⼀个⿊⽩清晰的边界。同时在每个数字的编码空间中,也不会出现⼀⼤⽚⿊,或者⼀⼤⽚⽩的状况,⽽是存在⾜够的⿊⽩变化,便于扫描器辨别。更重要的是,这样的编码⽅法提供了很多简便的查错⽅
法。⽐如⼀个完整的条形码,不论是什么内容,总是包含30个条纹。这样,当扫码器扫过之后如果发现多于30或少于30个条纹,⽴即就能知道是出错了。
后如果发现多于30或少于30个条纹,⽴即就能知道是出错了。19年高考作文
条形码应⽤中,还会出现⼀个常见的复杂性,就是扫码器既可能从左向右正着扫,也可能反过来扫。这就要求条形码⾃⾝携带左右标识。当我们在条形码的左边使⽤EAN-L码,右边使⽤EAN-R码的时候,条形码的左右就⾮常分明。左边所有数字的奇偶性为奇,右边所有数字的奇偶性为偶。当我们需要编制13位数编码,因此在左边6个数中有些会使⽤EAN-G码的时候,左边有些数字的奇偶性也可能呈现偶。不过,我们前⾯看到,左边6个数中最左边那⼀位总是使⽤L码,这就⾜以作为条形码的左标识了。
从条形码到⼆维码
条形码毫⽆疑问是⾮常成功的,但由于条形码是编码空间是⼀维的,因此可以携带的信息⾮常有限。很⾃然,⼈们想到要向平⾯上两个维度发展。多年来,⼆维的条形码出现过许多标准及变化。我们今天经常看到的⼀种是QR码。下图所⽰QR码是作者创作的⼀个科学普及⾳乐视频⽂件在微云上的链接。
这⾥特意提醒⼀下读者,⼀个⼆维码当中,直接编码的内容是⼏⼗乃⾄上百个字母或数字,它们通常构成⼀个链接,但它们不是视频⽂件本⾝。视频⽂件往往会需要⼏⼗ MB 乃⾄⼏⼗ GB 存储空间,⼆维码存储不了那么多的数据。
当然,⼆维码要容纳⼏⼗乃⾄上百个字母和数字也并不容易。对⽐条形码,⼈们对⼆维码在可靠性和准确性上的要求是⼀样的。但是,⼆维码要⽐条形码容纳更多的信息,因此还必须兼顾编码的效率。这两项要求在有的情况下是⽭盾的,但是在很多时候⼆者是相辅相成的。
⼆维码扫码使⽤时通常是⽤⼿机来拍照,在⼿机内得到⼀个由像素构成的⼆维点阵。⼿机中的软件只有可靠准确地获得了⼆维码的⾼度宽度等外形参数,才能正确地读取编制在⼆维码中的数据。那么,怎样才能⽅便地获取⼆维码的外形参数呢?这就需要我们在设计时作出仔细的考虑。
从QR码上,可以看到在左上⾓,右上⾓和左下⾓各有⼀个⼝字形或回字形的⽅块。我们应该可以猜测出,这三个⽅块就是为了提供⼆维码外形参数的。
问题是,为什么需要三个⽅块呢?只在左上⾓上留⼀个⽅块⾏不⾏?我们知道⼿机的照相机照出来的照⽚是会发⽣形变的,如果只有⼀个⽅块,就很不容易获取⼆维码的⾼度和宽度这两个参数。
如果只留两个⽅块,⽐如,保留右上⾓和左下⾓这两个⽅块。这好像也不⾏,因为在⼿机的照⽚中,
2022年是第几个三八国际劳动妇女节四年级数学期末试卷软件⽆法去辨认哪边是上哪边是下。如果只保留左上⾓和右上⾓两个⽅块,则上下倒是可以区分出来了。但是由于⼿机照⽚的形变,我们只能得到⼆维码宽度这个参数,⽽很难得到⾼度这个参数。因此,我们现在看到的⼆维码⾥⾯有三个⼤⽅块。
我们这⾥谈到的仅仅是⼀些最基本的考虑,实际上⼆维码⾥的学问还是不少的,这⾥有⼀个问题提供给⼤家思考。下⾯这个⼆维码中,只包含了⼀个字母“a”。既然只有⼀个字母,那么这个字母占据的⾯积应该是很⼩的吧?因此在整个码所占的⾯积中,应该⼤部分是空⽩。
但是,我们并没有在上⾯这个⼆维码中看到⼤块的⽩⾊或⿊⾊区域,⽽是到处都是错落有致,⿊⽩相间。⼤家不妨想想为什么要这样设计?⽤什么办法可以做到这点?
孩⼦们在世间遇到的问题从来不会按照教科书的次序,先易后难。他们可能还没有学过⼆进制,但却可能在任何时候到⼀个条形码或者⼆维码来问家长。怎样才能不被孩⼦问住呢?很简单,和孩⼦⼀块⼀堆条形码或⼆维码⼀块研究研究,规律,再上⽹查查,定会有所收获。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。