請用數學證明一,下二維碼為什麼不會重複?

社會工作師考試諮詢


二維碼是根據實際信息編寫的,比如你家地址就可以用一條二維碼錶示出來,除非有人和你家地址一模一樣,不然差一條街,一棟樓,一個門牌號,生成的二維碼都不會一樣,所以重複的不是二維碼,而是生成二維碼所根據的信息

目前一個普通的二維碼可以儲存數千個字母,或者數百個漢字。如果按二維碼全部儲存字母來算,哪怕只儲存1000個字母,那一個二維碼可能有26的1000次方種排列組合,而宇宙中所有原子的數量是10的80次方個。。。

或者換種說法,一條含有1000個字母的地址(或鏈接、標題等二維碼常用信息),有多大概率會重複?就目前來看,永遠也不會重複,普通地址百十來個字母(或字節),全世界名字最長的城市曼谷,也就167個字母,這已經能概括全世界所有地方了。哪怕你想給全宇宙所有原子都編個號,目前的二維碼也夠用了

還有,二維碼也不是固定的位數,它也像身份證或者手機號一樣可以增減的,如果某一天人類感覺手頭的二維碼不夠用了,那橫豎各加一行格子,儲存的信息又能再翻好幾個數量級,所以真的不必擔心二維碼會重複


堯單片機星際爭霸


肯定不會重複啊。

不同平臺編碼方式肯定不同啊。

支付寶的編碼方式肯定跟微信的編碼方式不同啊。

具體哪家的二維碼,具體怎麼個編碼方式,我不知道,但是肯定用的唯一性數據編的。

我拿身份證號碼舉例。320981199606223569.

其中320跟981直接就是對應具體地方,地方編碼唯一性。將描述的範圍具體到縣級市,1996年6月22號,利用時間的唯一性直接具體這一天生的人。唯一地區加上唯一時間基本就限定了那幾個人了,由於事實上一個縣裡一天撐死也就幾十個人誕生,在用3569或其他四位數將具體的人進行編號,一人一個。於是乎,一串號碼便對應具體的人。

身份證就是利用時間跟地點的唯一性,將範圍縮小到很小的範圍,再用超額的編碼一個個編號,一個個對應。(事實上還有數據加密過程這個複雜了,與題不相關,不說了)

在交易上,可以用交易方,地點,時間,交易方式,交易者賬號等等大量數劇唯一性進行編碼。(加密就不談了,數據之間是有加密過程的,不然誰都能根據規則隨意製造交易數據,或者用假數據騙錢了)

二維碼再怎樣,就是利用一組數據對應一個範圍,多個範圍直接決定一個具體的事物,,甚至直接用交易人的賬號,身份證等唯一數據進行編碼。產生的數據一定是唯一的。

二維碼是數據的圖形化而已,數據唯一,對應圖形也是唯一。

至於會不會出現阿里的二維碼被微信給掃描並能交易的情況是肯定不存在的。二個不同平臺的編碼方式不同,數據超短不同。會直接報錯的。即使編碼方式相同也沒用。數據的後中有一段是加密的。用於驗證是不是真實交易數據的。(比如身份證後四位,它不是隨意給出的,是通過前面的數據加上性別等數劇加密而成)沒有加密方式,隨意早數據是造不出來的。

就像999993288886536452這段,根本不存在,就沒有999993這個地方,2888年沒這時間,65月沒這個月,36號沒這一天。6452加密段根據前面加密成的更是錯的離譜。

唯有知道加密方式,編碼方式才能隨意製造,事實上是幾乎沒人知道的,


斷舍離42


大叔從二維碼的編碼原理角度來回答這個問題。

二維碼的基本概念

通常我們口中的二維碼一般是指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的二維碼容量和數量就可以知道:

所以在現有一個二維碼信息容量極限情況下的組合都達不到二維碼的數量,所以二維碼是不會重複也不需要重複,因為他的數量足夠涵蓋所有可能的信息組合了


編程老大叔


二維碼的一個點有黑白兩種顏色,橫豎37個點(除去定位用的有1177個點)也就是有2的1177次方種可能。超過了整個宇宙的原子的數量.....


分享到:


相關文章: