请用数学证明一,下二维码为什么不会重复?

社会工作师考试咨询


二维码是根据实际信息编写的,比如你家地址就可以用一条二维码表示出来,除非有人和你家地址一模一样,不然差一条街,一栋楼,一个门牌号,生成的二维码都不会一样,所以重复的不是二维码,而是生成二维码所根据的信息

目前一个普通的二维码可以储存数千个字母,或者数百个汉字。如果按二维码全部储存字母来算,哪怕只储存1000个字母,那一个二维码可能有26的1000次方种排列组合,而宇宙中所有原子的数量是10的80次方个。。。

或者换种说法,一条含有1000个字母的地址(或链接、标题等二维码常用信息),有多大概率会重复?就目前来看,永远也不会重复,普通地址百十来个字母(或字节),全世界名字最长的城市曼谷,也就167个字母,这已经能概括全世界所有地方了。哪怕你想给全宇宙所有原子都编个号,目前的二维码也够用了

还有,二维码也不是固定的位数,它也像身份证或者手机号一样可以增减的,如果某一天人类感觉手头的二维码不够用了,那横竖各加一行格子,储存的信息又能再翻好几个数量级,所以真的不必担心二维码会重复


尧单片机


大叔从二维码的编码原理角度来回答这个问题。

二维码的基本概念

通常我们口中的二维码一般是指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的二维码容量和数量就可以知道:

所以在现有一个二维码信息容量极限情况下的组合都达不到二维码的数量,所以二维码是不会重复也不需要重复,因为他的数量足够涵盖所有可能的信息组合了


编程老大叔


肯定不会重复啊。

不同平台编码方式肯定不同啊。

支付宝的编码方式肯定跟微信的编码方式不同啊。

具体哪家的二维码,具体怎么个编码方式,我不知道,但是肯定用的唯一性数据编的。

我拿身份证号码举例。320981199606223569.

其中320跟981直接就是对应具体地方,地方编码唯一性。将描述的范围具体到县级市,1996年6月22号,利用时间的唯一性直接具体这一天生的人。唯一地区加上唯一时间基本就限定了那几个人了,由于事实上一个县里一天撑死也就几十个人诞生,在用3569或其他四位数将具体的人进行编号,一人一个。于是乎,一串号码便对应具体的人。

身份证就是利用时间跟地点的唯一性,将范围缩小到很小的范围,再用超额的编码一个个编号,一个个对应。(事实上还有数据加密过程这个复杂了,与题不相关,不说了)

在交易上,可以用交易方,地点,时间,交易方式,交易者账号等等大量数剧唯一性进行编码。(加密就不谈了,数据之间是有加密过程的,不然谁都能根据规则随意制造交易数据,或者用假数据骗钱了)

二维码再怎样,就是利用一组数据对应一个范围,多个范围直接决定一个具体的事物,,甚至直接用交易人的账号,身份证等唯一数据进行编码。产生的数据一定是唯一的。

二维码是数据的图形化而已,数据唯一,对应图形也是唯一。

至于会不会出现阿里的二维码被微信给扫描并能交易的情况是肯定不存在的。二个不同平台的编码方式不同,数据超短不同。会直接报错的。即使编码方式相同也没用。数据的后中有一段是加密的。用于验证是不是真实交易数据的。(比如身份证后四位,它不是随意给出的,是通过前面的数据加上性别等数剧加密而成)没有加密方式,随意早数据是造不出来的。

就像999993288886536452这段,根本不存在,就没有999993这个地方,2888年没这时间,65月没这个月,36号没这一天。6452加密段根据前面加密成的更是错的离谱。

唯有知道加密方式,编码方式才能随意制造,事实上是几乎没人知道的,


断舍离42


二维码的一个点有黑白两种颜色,横竖37个点(除去定位用的有1177个点)也就是有2的1177次方种可能。超过了整个宇宙的原子的数量.....


分享到:


相關文章: