条形码怎么用 条形码怎么弄上去的( 二 )


条形码怎么用 条形码怎么弄上去的

文章插图
那么,右边的条形码又是什么样的呢?我们希望最终的条形码具有一定的对称性,比如希望右边的码左黑右白,这样可以与结束符(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个条纹,立即就能知道是出错了 。
条形码应用中,还会出现一个常见的复杂性,就是扫码器既可能从左向右正着扫,也可能反过来扫 。这就要求条形码自身携带左右标识 。当我们在条形码的左边使用EAN-L码,右边使用EAN-R码的时候,条形码的左右就非常分明 。左边所有数字的奇偶性为奇,右边所有数字的奇偶性为偶 。当我们需要编制13位数编码,因此在左边6个数中有些会使用EAN-G码的时候,左边有些数字的奇偶性也可能呈现偶 。不过,我们前面看到,左边6个数中最左边那一位总是使用L码,这就足以作为条形码的左标识了 。
从条形码到二维码
条形码毫无疑问是非常成功的,但由于条形码是编码空间是一维的,因此可以携带的信息非常有限 。很自然,人们想到要向平面上两个维度发展 。多年来,二维的条形码出现过许多标准及变化 。我们今天经常看到的一种是QR码 。下图所示QR码是作者创作的一个科学普及音乐视频文件在微云上的链接 。