当前位置: > 热议

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

时间:2022-04-30 04:33:40 热议 我要投稿

谢邀!

大叔从二进制原理的角度来回答这个问题。

首先答案是:二维码数量有限,并且可计算,但按现有技术是用不完的

下面就仔细讲讲这个答案的由来

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

全球每年消耗二维码上百亿,这里面我暂且认为全部是不同的二维码,也即是活码,其实这里面应该是有很多是固定的,就是所谓的静态码。全部按活码计算,各种可能的组合也达不到现有二维码的总数,所以二维码数量有限,并且可计算,但按现有技术是用不完的;