1
Posted on 下午4:11:00 by Fan Zhang and filed under

  如果你错过了煎蛋这篇:学会条码,在它被遗弃之前,不要紧,你依然可以通过阅读本文快速掌握人眼扫描、解码,从而破解出这些粗细条条蕴含的深刻含义的高科技技能。

条形码的意义

  按照八股论文的写法,我应该先介绍下条形码的NB之处,以提醒读者此刻正在阅读一篇有着深刻含义的文章。

  2009年10月7日,Google 为了纪念1952年10月7日条形码 (Bar Code) 成功申请专利(专利号为2612994),首页 Logo 都改成了条形码。这个日子恰好与高锟、乔治·史密斯、威拉德·波义耳被授予诺贝尔物理学奖的时间重叠在一起,而他们发明的"电荷耦合器件"在用于扫读条形码的方面作出了贡献。

  为了继承这宝贵的文化遗产,应对外星人入侵地球导致所有条码扫描仪都失效的情况,我们必须学习条形码!当然,某些三俗的读者可能觉得"在MM面前显摆才是真正的目的"。

准备工作

  对正常人来说,只要能看见东西就行。

  如果你有条码扫描仪,可以用来通过扫描实物来做练习。不要问:"我都有扫描仪了还学什么?"这种弱智问题。

条码介绍

  所谓万变不离其宗,下面介绍的是通用的 Code 39。条条们分为四种:细细的白条、粗粗的白条、细细的黑条、粗粗的黑条。它们分别代表条码中所用的四个符号:空格、破折号、0和1。对应关系如下:

  • 细白:空格
  • 粗白:破折号
  • 细黑:0
  • 粗黑:1

  也就是说,粗细不等的黑条表达了主要的编码,白条则表达分隔符。注意到,空格的含义并不是指编码中的空格,而是要分离相邻的两个黑条。破折号不仅可以分离相邻的黑条,还可以表达破折号的含义...

  题目:阅读下面的条形码,写出它代表的二进制编码。

  答案是:0-0110|10-010|01-100|00-011|10-100|11-000|00-110|01-010|0-0110,其中的"|"不在条码表示的范围,是为了更好的阅读手工加入的,5位一组。

  那么这堆数字表示什么含义呢?就要熟记下面的编码含义了:

  • * = 0-0110
  • 0 = 00-110
  • 1 = 10-001
  • 2 = 01-001
  • 3 = 11-000
  • 4 = 00-101
  • 5 = 10-100
  • 6 = 01-100
  • 7 = 00-011
  • 8 = 10-010
  • 9 = 01-010

  于是,上面的条形码表达的编码含义为:*8675309*,至此,恭喜你已经具备了技能:阅读条形码 Level 1。

更多技巧

  有同学立刻提问,那个星号是什么意思。在正规的 Code 39 中,开头都有一个"*",它的作用和男人的乳头是一样的(亦即区分正反面...煎蛋怎么这么邪恶)。

  又有同学说了,阅读出 01 串比较简单,怎么跟数字对应上呢?这叫涉及到当初设计条形码编码时的高深理论了:我们可以看到,每一个条形码如果表达的含义是数字,则它是形如:ab-cde 的形式。

  • e 是奇偶校验用的,无视。
  • 有两个1和三个0。
  • 左边四位按照逆序排列dcba,其值是:1-6、8-10、12,分别对应真实数字中的:1-6、7-9、0。
  • 为何跳过7和11?是为了校验方便,避免出现三个1的情况。

更多疑问

  感谢坚持阅读到这里,您可能会有疑问:"知道了数字,我还是不知道有什么用啊?怎么知道定价呢?"这很简单,只要你能连上商场超市的数据库,查询对应条码即可。至于怎么连上数据库,就是另外一个问题了。

  也有同学对本文表达质疑:"现在条形码下面似乎都有数字啊"。我想说,怎么这么死脑筋,难道不会把数字挡住,然后对身边的MM(不排除是GG)说:"你看,我不看下面的数字也能说出下面的数字!厉害吧!"。

更多链接

   Read a Barcode