二维码简单原理是什么?

愣是谁也不会想到二维码居然会全面地覆盖我们的生活,网站登录要扫二维码,加好友要扫二维码,就连菜市场卖菜的老头、老太太都懂得扫码支付了,小小“方块”脱颖而出,不仅仅可以容纳数字,还可以容纳文字、图像、指纹、声音等等。二维码展现的是机器二进制语言,“0”和“1”这两个数字组成了如今我们从电脑里看到的所有的信息。

在二维码中,白色的方块表示0,而黑色的方块表示1。一个二维码是由定位标志、定时标志、校正标志、内容信息这四个部分组成的。定位标志也叫码眼,用来定位二维码的图形区域,没有它二维码就无法被识别出来。定时标志并不是非必须的,所以它是可以删除的,在大型二维码中一般起到确定坐标的作用,属于辅助性的定位。校正标志可以确保我们不管在哪个方向扫描二维码都能够识别出内容来,如果没有这个标志我们只能正面地扫码二维码了。

内容信息里面填充的就是扫码的人所能看到的信息,内容信息是具有一定的容错率,所以中间删减或者遮挡掉一部分都可以被扫描出来。二维码有四种纠错级别,从低到高分别是L、M、Q、H,他们的纠错率分别是7%、15%、25%、30%,纠错率越高越容易被快速扫描。纠错其实就是在创建编码二维码的时候创建了一些冗余数据,这样不但可以确保准确快速的识别出二维码完整无误的信息,也可以确保二维码部分损坏时不影响读取正确的信息。

二维码为什么会出现二维码其实很早就出现了,它是由日本电装(DENSO)旗下子公司DENSO WAVE一名叫原昌宏的人1994年发明出来的。二维码的出现旨在取代传统的仅能容纳少量数字信息的条形码。因为上世纪60年代后,日本的商超一派繁荣景象,而收银员却要不停地输入产品信息和价格,所以“腱鞘炎”这种职业病开始流行。

DENSO WAVE怀着满足客户需求的愿景成立的仅有2个人的研发小组旨在“容纳更多的信息”。传统条形码仅在一个方向上存储信息,而且很容易读取错误,而二维码则在2个方向存储信息,信息量就大大地扩容了,二维码的名称就是这样被定义的。二维码之所以在今天能够这么流行除了它本身的巨大优势之外,还得益于DENSO WAVE放弃行使这项权利的权利,如果DENSO WAVE手握专利收费使用二维码可能又是另一番命运。

手机扫描二维码的一瞬间发生了什么?手机扫描二维码解码程序会自动的识别二维码中的信息,滴一声之后就会对二维码做相应的处理。比如是一段文字就会马上弹出文字信息,如果是一条网页URL则会自动的传输数据给服务器,服务器在接收到数据后就将相应的请求信息反馈到手机上。二维码中的信息自生成出来之后就是固化的,真正能识别并产生动作的是手机内置的程序。

二维码到底会不会被消耗光?二维码最小的符号尺寸时21*21,最大的符号尺寸时177*177,现在二维码有40多个官方版本。二维码的数量跟二维码的尺寸相关,所以它是有限的。如今全球每天消耗的二维码达上百亿个,但是即使是从宇宙大爆炸到用到今天,138亿年也仅仅只是消耗掉一小部分,所以并不需要它会被消耗光。

二维码原理是什么?可以生成无数个不相同的,还是会被用尽?

谢邀!大叔从二进制原理的角度来回答这个问题。首先答案是:二维码数量有限,并且可计算,但按现有技术是用不完的下面就仔细讲讲这个答案的由来二维码的基本概念通常我们口中的二维码一般是指QR Code,也就是支付宝、微信支付、火车票等通用的二维码格式。但是,二维码的格式可以说多种多样,包括Data Matrix、QR Code、PDF417、Vericode、Ultracode等,不同的二维码制式,在不同的领域有着不同的应用。

QR Code是一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字符,数字,日文,中文等等。二维码,从字面上看就是用两个维度(水平方向和垂直方向)来进行数据的编码,条形码只利用了一个维度(水平方向)表示信息,在垂直方向没有任何表示意义,所以二维码比条形码有着更高的数据存储容量和组合可能。

二维码在一维条形码的基础上,将多个条形码堆积在一起进行编码。我们产用的矩阵式二维码是指在一个矩阵空间中通过黑色和白色的方块进行信息的表示,黑色的方块表示1,白色的方块表示0,相应的组合表示了一系列的信息,常见的编码标准有QR 码,在我国非常常用。二维码编码原理那么二维码到底是通过什么魔力,将人类可以识别的内容(比如中文、网址等)转为机器能识别的二维码呢?前面讲到的基本概念中提到二维码中,黑色的方块表示1,白色的方块表示0。

也就是计算机编程领域讲的二进制。我们首先来看人类日常使用的语言是怎么转换为二进制的(关于这个我有写一篇关于计算机编码的文章,有兴趣的朋友可以翻看)。先看我从文章中拉出来的两张图:英文字符如何转换为二进制存储汉字字符如何转换为二进制存储从上面两个图可以看到,人类可识别的字符都是通过一种字符集(ASII、Unicode)将字符映射成十进制数字,然后通过二进制转换为二进制。

同样,二维码可以根据自己定义的编码规则和字符集,将这些字符转换为二进制,并且利用黑白方块来存储二进制;二维码的容量与数量首先,二维码一共有 40 种尺寸。官方叫法为版本 Version。Version 1 是 21 x 21 的矩阵,Version 2 是 25 x 25 的矩阵,Version 3 是 29 的尺寸,每增加一个 version,就会增加 4 的尺寸,公式是:(V-1)*4 21(V是版本号) 最高 Version 40,(40-1)*4 21 = 177,所以最高是 177 x 177 的正方形。

也就是177*177个黑/白方块,一个方块可以表示一个0或者1;我们首先看下二维码的容量:理论上Version 40,在内容经过压缩处理后可以存7089个数字,那么0~9组合就有10^7089种可能的组合;4296 个字母和数字混合字符,那么就有1.27^(4296 2)种组合; 2953个8位字节数据,1817个汉字,那么就有10^(1817 5)种组合;再看二维码数量:那么,二维码数量有多少呢?分版本:Version 1 :有21*21个黑白方块,那么就是2^(21*21)个,转化成科学计数法就是5.7e 132个;Version 40:有177*177个黑白方块,那么就是2^(177*177)个,转化成科学计数法就是9.3e 9430个;所以对比一下Version 40的二维码容量和数量就可以知道:全球每年消耗二维码上百亿,这里面我暂且认为全部是不同的二维码,也即是活码,其实这里面应该是有很多是固定的,就是所谓的静态码。

大家都熟知二维码,那么字符串是怎么转换成二维码的呢?原理是啥?

移动互联网时代,二维码在我们身边可以随处可见,手机支付有付款码,公交地铁有乘车码,还有最近出现的健康码。其实不管是付款码还是乘车码,本质上它们都是二维码,那么二维码到底是什么呢?二维码是什么?回想一下我们在超市买东西时结账的流程:首先我们打开付款码,接着收营员扫我们的付款码,然后钱就自动从我们的账户中扣除了。

可以看出,扫码付款的过程就是从二维码到人的一个过程,从二维码所代表的信息中找到我们的账户信息并从中扣款。那么二维码所代表的信息是什么时候确定的?当然是生成二维码的时候啦!我们要使用手机支付功能,首先必须注册帐号,此时帐号就代表了我们。打开付款码的时候,系统会将我们的身份信息经过一些计算,最终生成一个二维码并展示给我们。

生成二维码的过程就是将信息转换成二维码的过程,扫码的过程则是将二维码再转换成信息的过程,所以二维码本质上只是信息的一种展示形式而已。二维码结构分析虽然二维码看起来是毫无规律的,但其实二维码的生成有着固定的格式。大小二维码的大小存在 40 种版本(Version),从Version1(21x21的正方形)到Version40(177x177的正方形),每增加一个 Version,大小都会增加 4。

版本越大二维码就会越大,随之所能表示的数据量也就越大。结构二维码呈正方形,通常由黑白小方块组成,二维码的整体结构可以分为定位标记、功能区以及数据区三大部分:定位标记——在二维码的左上角、右上角、左下角有3个类似“回”字的方形图案,这3个图案是用于二维码的定位标记。正因为有定位标记的存在,所以不管我们以什么角度扫描,二维码总是可以被准确的识别出来。

二维码中还存在一些小一点“回”字,它们是用于校正定位的标记,并且只会在Version 2及以上版本的二维码中才会出现。功能区——功能区分为两部分,即图中红色部分和紫色部分。红色部分存放格式信息,用于表示该二维码的纠错级别(至于纠错级别是什么后面在解释),紫色部分存放版本信息,即该二维码的尺寸大小。数据区——数据区指的是除去定位标记和功能区的其他部分(图中灰色部分),用于保存二维码实际所表示的信息的数据码以及用于纠错的纠错码。

纠错级别二维码一般有一定的容错率,所以即使二维码被遮挡住一部分,仍然可以被扫描出来,原理就是在生成二维码的过程中对数据做了冗余处理,冗余程度越高容错率就越高(纠错级别越高),二维码能被遮挡的部分自然也就越多。二维码的纠错级别从低到高分为L(7%)、M(15%)、Q(25%)、H(30%)4个等级,如果需要在二维码中间加logo,那么我们就应该生成H级别的二维码,但也并不是纠错级别越高越好,级别越高需要冗余的数据就越多,那么生成的二维码的复杂程度也就越高,实际使用过程中我们应该根据需求选择合适的纠错级别。

编码模式我们都知道计算机只认二进制信息,所以我们需要把字符串中的数字、字母、汉字以及各种字符统一转换成由0和1组成的二进制数字串计算机才能识别,所以生成二维码的过程就是将字符串转换成二进制数字串的过程。最后生成的二进制数字串对应到二维码上,0对应白色的小方块、1对应黑色小方块,按照8个一组依次填充到数据区就是一个完整的可以被识别的二维码了。

根据源字符串类型,二维码主要支持4种标准化的编码模式,分别为数字编码、字符编码、字节编码以及日文编码,当然也支持其他一些特殊的字符集编码以及混合编码。每种编码模式对应一个4位的二进制的编码模式指示符:下面以字符编码举个例子,现在有字符串“HELLO WORLD”1、模式指示符——根据查表可知HELLO WORLD需要使用字符编码模式,所以它的模式指示符为0010。

2、字符计数指示符——表示源字符串的长度,字符计数指示符必须放在模式指示符之后。字符计数指示符的计算依赖于二维码的版本以及编码模式:以版本1为例,字符编码需要9bits,HELLO WORLD长度为11,转为二进制为1011,不足9位,左边补5个0得到最终结果000001011,加上模式指示符目前我们得到的二进制数字串为0010 000001011。

3、对原字符串编码,将HELLO WORLD两两分组得到(H,E)、 (L,L)、(O, )、(W,O)、(R,L)、(D);根据索引表找到每个字符对应的值,得到(17,14)、 (21,21)、(24,36)、(32,24)、(27,21)、(13);将每组数字先转成45进制、再将结果转成长度11的二进制串,长度不足的补0。

例如(17,14) 转成45进制为17*45 14=779,再将779转成二进制 1100001011,左边补1个0得到01100001011,如果最后一组是单独一个,则转成6位的二进制串,所以字符串HELLO WORLD经过字符编码之后,再加上前面计算好的模式指示符和字符计数指示符之后最终得到0010 000001011 01100001011 01111000110 10001011100 10110111000 10011010100 001101。

4、 在确定二维码的版本和纠错级别以后,字符串的编码结果应该是一个固定长度的二进制串,如果我们计算的结果长度不够就需要进行不起操作。例如确定二维码的版本1和纠错级别Q,则最终二进制串的长度需要达到104位。在第3步中我们得到的最二进制串的长度为74,所以需要进行补齐操作。首先末尾可以至多追加4个0,接着末尾补齐更多的0直到长度是8的倍数,如追加4个0后长度达到78,要达到8的倍数则还需要补2个0;如果这时候长度还没有达到目标,那就在末尾循环追加固定的二进制码11101100 00010001直到达到目标长度。

最后来看一下HELLO WORLD经过字符编码之后结果掩码图源字符串在经过编码之后被转换成二进制的数字串,根据这个二进制数字串画出来的二维码通常会存在黑白色块分布不均的情况,这会导致二维码容易扫描失败。为了解决这个问题,官方提供了8种掩码方案:我们需要选择一个掩码图与我们生成的二维码再做一次异或操作,这样黑白色块分布就会更加的均匀。


文章TAG:什么都需要二维码  二维码是什么原理  什么  需要  二维码  
下一篇