网友提问:
不同的软件,不同的平台,是怎么保证生成的二维码都不雷同的?
优质回答:
文/科技民兵
我在研究生期间恶补过一些关于二维码原理的论文,正好借这个问题的机会跟大家分享一下。题主所说的雷同,应该就是两个二维码中黑白小块大小、位置、数量完全一致的意思,先说结论:如果仅仅看外观,现实生活中是存在长相雷同的二维码的。
大家可能会疑惑了,二维码雷同,那不就“泄密”了吗?这里大家有个误区,把二维码当成了一种加密方法,属于随机生成的密钥,其实并不是,二维码只是原始信息的一种图形化表达,好比中文翻译成英文,只是把字符、中/日文字、数字等转译成了黑白方块的矩阵,其目的并不是防止别人识别。如果原始信息不同,那么生成的二维码自然不同,但是不同的原始信息,如果采用的编码方式有差异,是有可能产生雷同的二维码的。
题主的疑问可以分解为以下两点:
(1) 二维码有没有被人类用完的可能?
(2)有没有可能存在相同的二维码,但是其原始信息却不一样?
可能这也是很多朋友的疑问,全世界每天有很多人都在使用二维码,据估计可能一天产生的二维码就达上百亿,那么长此以往下去,二维码不就用完了吗?万一哪天别人新生成的支付宝收款码正好是我之前用过的,那钱岂不是就转给我了?哈哈,我想说,你想得美。马云爸爸会允许吗?下面就我自己的理解,给大家讲讲其中的原理。
首先需要先补充一点二维码的知识,不感兴趣的朋友可以直接跳到文末解答疑问的部分。
二维码原理简介
通俗的讲,二维码就是使用某些特定几何图形按照一定规律排列从而达到记录符号信息的一种编码技术,编码的输入端是网址、电子名片、邮件地址等,输出端是二维的黑白方块矩阵。编码的码制有很多种,最常见的就是QR(Quick-Response) code,此外还有Data Matrix, Maxi Code等等。
典型的QR code如上图所示,主要分为功能图形、编码区格式两大块,其中功能图形包括位置探测图形、位置探测图形分隔符、定位图形和校正图形
“三个位置相关的图形,用于对二维码的定位,对每个QR码来说,他们的位置都是固定存的,只是规格不同而已”
校正图形:与规格对应,一旦规格定下来,校正图形的数量和位置也就确定了
格式信息:这个代表二维码的纠错级别,二维码总共有为L、M、Q、H四种纠错等级,L最低,H最高,等级越高,二维码可被正确扫描的概率就越大,但同时二维码可携带的有效信息也会变少
版本信息:可以理解为二维码的规格,QR码符号共有40种规格的矩阵(一般为黑白色),从21×21(版本1),到177×177(版本40),每一版本符号比前一版本 每边增加4个模块
数据和纠错码:数据就是指真实编码后的内容,比如网址对应的黑白块,纠错字是为了纠正传输过程中丢失部分信息后,能正确解码用的,日常生活中二维码经常会被人为扭曲、磨损,此时纠错码就派上用场了。
二维码特点一:编码的数据容量量有限制
二维码对编码的数据容量是有限制的,你给我一本新华字典,我肯定是无法给你生成二维码的,因为新华字典字太多了,远远超出了二维码容许的数据上限。
上图是QR码可以容纳的数据容量表,可以看出,通过QR码制来生成二维码,最多容纳7089个数字或者4296个字母,如果是中文汉字,那么采用UTF-8编码的汉字最多可以容纳984个,差不多一个头条问答的字数。这样就从源头上保证了可以被转成二维码的信息是有限制的。
二维码特点二:二维码的编码是可逆的,原始信息和二维码一一对应
二维码的所有编码步骤都是可逆的,如果给我一个二维码,并且告诉我编码步骤中的参数设定,我一定可以把原始信息给解出来,这就从原理上保证了原始信息和二维码的一一对应关系。确实,二维码的“长相”是有限的,但是可用于编码的数据量也是有限的,而且二维码的数量是大于可编码信息的组合数量的,这也是保证原始信息和二维码一一对应的数学证据。
回答上面的两个问题
(1)二维码有没有被人类用完的可能?
答:问题本身不成立,这是错误的把二维码当成了凭空生成的密钥之类的东西了,实际上可用于生成二维码的数据量(数字、字幕、汉字、日文)就是有限的,并且小于二维码在数学上的数量上限,所以本身问题就不成立。
(2)有没有可能存在相同的二维码,但是其原始信息却不一样?
答:如果仅从“长相”上相同,即黑白块数量、大小、位置都一样,是有可能对应的原始信息不一样的,这是因为二维码的编码,是原始信息+纠错级别+编码类型(数字、字母、汉字 等)+版本信息四项因子一起构造的,两个不同的信息,比如www.baidu.com和“周杰伦”,如果选择的纠错级别、编码类型、二维码版本不一样,是可能生成“长相”完全一致的二维码的。如果两张“长相”一样的二维码,而且纠错级别、编码类型、版本信息也完全一致,那么逆推出的原始信息,一定是一样的。
衍生问题
有朋友可能会继续问,既然能被生成二维码的信息是有限的,那么总有一天所有组合都被人类用完了,这个时候肯定会出现重复的二维码,这个怎么保证安全呢?事实上,二维码除了以上维度以外,还有一个时间维度,二维码分静态二维码和动态二维码,静态二维码永远有效,而动态二维码则在一定时间内有效,比如支付宝的付款码,这有点像计算机中的HDCP动态分配IP地址技术,如果某个用户下线了,那么他的IP地址会分配给新上线的用户,这样就能保证一个局域网内的IP地址够用的,当然如果用户量达到上限,还是要新增IP地址范围的,这也是IPv6存在的主要原因。
结束语
时间关系,先解释这么多,应该可以解答题主的疑问了。以上信息主要信息来自于我研究生期间看过的几篇论文,是我个人的理解,如果有错误,欢迎指正。
我是科技民兵,一个有温度的科技作者,如果对于这个话题有想说的,可以在下面留言给我。
其他网友回答
二维码由于结构,错误修正系数各项设定需注意.如无认识,就算输入内容不同也难保目视一样.何况用不同的软件制作的二维码.
其他网友回答
都是神一样的回答。
输入内容相同的话就会重复。只是由于算法不同在呈现上有着区别。同入一输入内容,用不同类型的算法生成的二维码在外观上不同,但读取出的结果后都一样。二维码只是把有限长度的字符串转换成为了机器能快速识别的图块了,它解决不了重不重复的问题。