应用

技术

物联网世界 >> 解决方案 >> 物联网方案
企业注册个人注册登录

二维码的图案原理解析

  随着苹果手机的研发及安卓系统的市场铺张式的发展,使得二维码,这个不起眼的黑白相间的小方块,正在悄然改变着我们的生活方式。

  当你频繁和它照面的时候,你有没有过这样的好奇:为什么用手机扫一下就会看到一个“花花世界”?二维码的颜色为什么是黑白相间的呢?这些不规则几何图形中究竟藏着怎样的“秘密”? 

  示意图

  常见的二维码上为啥三个角上有方块

  这是三个定位点,图形旋转也不影响识别

  要了解二维码的原理,我们先要来好好认识一下它。现在最常见的二维码是OR二维码(OR是一种码制),我们便以它为例。

  我们看一个二维码,最先看到的当然是几何图形。这些图形中,藏了不少重要的“部件”。偶然物联网商城邀请南京邮电大学计算机学院副教授黄海平给我们做了详细分析。

  首先,OR二维码的三个“角”上有三个方块,可别小瞧这方块,它叫位置探测图形。有了这三个点,不管是从哪个方向读取二维码,信息都可以被识别。即使将二维码图形旋转,也可以识别。也许你会问,为什么不是四个角上都有方块呢?事实上,是可以设更多的点,但几何知识告诉我们,3点就可以确定一个平面,节省出的一个角可以嵌入更多信息。

  另外,二维码上还有一些图形混杂在几何图形中,是肉眼看不出来的,比如定位图形和分隔符。定位图形就是图中连接三个位置探测图形之间的两根“线”,它的作用是决定二维码符号中模块的坐标,而分隔符的作用是将位置探测图形与符号的其余部分分开。也就是说,通过扫描能读取的数据信息在二维码中的位置是由定位图形和分隔符决定的。

  还有两个图形肉眼也难以发现,位于左下角位置探测图形上面的是“版本信息”,每个二维码都有一个版本号,我们常说的V1.0、V2.0就是版本;包围在三个位置探测图形周边的则是“格式信息”,这指的是这个二维码采用的编码格式。[page]

  二维码为什么是黑白相间的

  黑色表示二进制的“1”,白色表示二进制的“0”

  “我们之所以对二维码进行扫描能读出那么多信息,就是因为这些信息被编入了二维码之中。”黄海平说,“制作二维码输入的信息可以分成三类,文本信息,比如名片信息;字符信息,比如网址、电话号码;还有图片信息,甚至还可以包括简短的视频。”

  数据信息是怎么被编入的呢?信息输入后,首先要选择一种信息编码的码制。现在常见的二维码都是以QR码作为编码的码制。

  QR码是矩阵式二维码,它是在一个矩形空间内,通过黑、白像素在矩阵中的不同分布,来进行编码的。我们知道电脑使用二进制(0和1)数来贮存和处理数据,而在二维码中,用黑白矩形表示二进制数据我们肉眼能看到的黑色表示的是二进制“1”,白色表示二进制的“0”,黑白的排列组合确定了矩阵式二维条码的内容,以便于计算机对二维码符号进行编码和分析。

  为了让我们更形象地了解,黄海平对信息“bcde”进行了QR编码(同时为了防泄露置入了密钥“a”,这是为了保护信息),这样经过编码,就出现了一个全部由0和1组成矩形的排列。由这个信息又生成了二维码。

  至于数据信息到底在黑白相间的矩形中的什么位置,非专业人士是无法知晓的,“这都是后台的工作了,QR码有自动的规则,将信息安排在二维码相应的位置。”黄海平说。

  和数据信息混在一起编入二维码的还有纠错码信息。这是因为当我们对二维码进行扫描时,不能保证扫的每一位信息都正确,这就需要依赖纠错码信息了。

  此外,二维码中还藏着非常重要的校正图形。当二维码遭到污染或者破坏时,校正图形保证了没有被破坏的信息仍然可以被识别。也就是说,我们扫描读出的信息在二维码中备份了很多份。“即使二维码的损毁面积高达50%,信息仍然可以读取。”这也就是我们对着一个二维码扫描时,不需要只扫描整个图形,而只对着图形的某一个部分,就可能成功获取信息的原因。不信你可以试试!

  说到这里,扫描二维码为什么能读取信息就好理解了。“在我们用光电扫描器或者手机智能终端的扫描软件进行扫描时,其实是一个解码的过程,解码恰恰是编码的逆过程。具体说来,是位置探测图形定位二维码的区域,根据二维码的编码格式信息和纠错码,对数据进行解读。如果编码时经过加密处理,解码时则需要加密时的密钥信息。”

  也许你有个疑问,此前条形码在生活里也已经有诸多应用,比如超市货架上的东西都有条形码,二维码相比条形码有什么优点呢?黄海平说,条形码是一维的,而二维码是采用纵横向编码的,储存的信息量就大很多。有数据显示,最多可记录1850个大写字母,2710个数字或500多个汉字。另外,二维码的空间利用率高;二维码除了常见的OR码,还可以用其他码制进行编码。还有,前面说到的纠错能力和校正能力,以及加密功能,都是二维码的优势。

  为什么扫二维码的一部分也能看到信息?那是因为校正图形藏在二维码中,具有多个数据信息备份,所以,我们扫描一部分二维码也能显示出全部的信息来。