不同的軟件,不同的平臺,是怎麼保證生成的二維碼都不雷同的?

NIC藍色


我在研究生期間惡補過一些關於二維碼原理的論文,正好借這個問題的機會跟大家分享一下。題主所說的雷同,應該就是兩個二維碼中黑白小塊大小、位置、數量完全一致的意思,先說結論:如果僅僅看外觀,現實生活中是存在長相雷同的二維碼的。

大家可能會疑惑了,二維碼雷同,那不就“洩密”了嗎?這裡大家有個誤區,把二維碼當成了一種加密方法,屬於隨機生成的密鑰,其實並不是,二維碼只是原始信息的一種圖形化表達,好比中文翻譯成英文,只是把字符、中/日文字、數字等轉譯成了黑白方塊的矩陣,其目的並不是防止別人識別。如果原始信息不同,那麼生成的二維碼自然不同,但是不同的原始信息,如果採用的編碼方式有差異,是有可能產生雷同的二維碼的。

題主的疑問可以分解為以下兩點:

(1) 二維碼有沒有被人類用完的可能?

(2)有沒有可能存在相同的二維碼,但是其原始信息卻不一樣?

可能這也是很多朋友的疑問,全世界每天有很多人都在使用二維碼,據估計可能一天產生的二維碼就達上百億,那麼長此以往下去,二維碼不就用完了嗎?萬一哪天別人新生成的支付寶收款碼正好是我之前用過的,那錢豈不是就轉給我了?哈哈,我想說,你想得美。馬雲爸爸會允許嗎?下面就我自己的理解,給大家講講其中的原理。

首先需要先補充一點二維碼的知識,不感興趣的朋友可以直接跳到文末解答疑問的部分。

二維碼原理簡介

通俗的講,二維碼就是使用某些特定幾何圖形按照一定規律排列從而達到記錄符號信息的一種編碼技術,編碼的輸入端是網址、電子名片、郵件地址等,輸出端是二維的黑白方塊矩陣。編碼的碼制有很多種,最常見的就是QR(Quick-Response) code,此外還有Data Matrix, Maxi Code等等。

典型的QR code如上圖所示,主要分為功能圖形編碼區格式兩大塊,其中功能圖形包括位置探測圖形、位置探測圖形分隔符、定位圖形和校正圖形

“三個位置相關的圖形,用於對二維碼的定位,對每個QR碼來說,他們的位置都是固定存的,只是規格不同而已”

校正圖形:與規格對應,一旦規格定下來,校正圖形的數量和位置也就確定了

格式信息:這個代表二維碼的糾錯級別,二維碼總共有為L、M、Q、H四種糾錯等級,L最低,H最高,等級越高,二維碼可被正確掃描的概率就越大,但同時二維碼可攜帶的有效信息也會變少

版本信息:可以理解為二維碼的規格,QR碼符號共有40種規格的矩陣(一般為黑白色),從21x21(版本1),到177x177(版本40),每一版本符號比前一版本 每邊增加4個模塊

數據和糾錯碼:數據就是指真實編碼後的內容,比如網址對應的黑白塊,糾錯字是為了糾正傳輸過程中丟失部分信息後,能正確解碼用的,日常生活中二維碼經常會被人為扭曲、磨損,此時糾錯碼就派上用場了。

二維碼特點一:編碼的數據容量量有限制

二維碼對編碼的數據容量是有限制的,你給我一本新華字典,我肯定是無法給你生成二維碼的,因為新華字典字太多了,遠遠超出了二維碼容許的數據上限。

上圖是QR碼可以容納的數據容量表,可以看出,通過QR碼制來生成二維碼,最多容納7089個數字或者4296個字母,如果是中文漢字,那麼採用UTF-8編碼的漢字最多可以容納984個,差不多一個頭條問答的字數。這樣就從源頭上保證了可以被轉成二維碼的信息是有限制的。

二維碼特點二:二維碼的編碼是可逆的,原始信息和二維碼一一對應

二維碼的所有編碼步驟都是可逆的,如果給我一個二維碼,並且告訴我編碼步驟中的參數設定,我一定可以把原始信息給解出來,這就從原理上保證了原始信息和二維碼的一一對應關係。確實,二維碼的“長相”是有限的,但是可用於編碼的數據量也是有限的,而且二維碼的數量是大於可編碼信息的組合數量的,這也是保證原始信息和二維碼一一對應的數學證據。

回答上面的兩個問題

(1)二維碼有沒有被人類用完的可能?

答:問題本身不成立,這是錯誤的把二維碼當成了憑空生成的密鑰之類的東西了,實際上可用於生成二維碼的數據量(數字、字幕、漢字、日文)就是有限的,並且小於二維碼在數學上的數量上限,所以本身問題就不成立。

(2)有沒有可能存在相同的二維碼,但是其原始信息卻不一樣?

答:如果僅從“長相”上相同,即黑白塊數量、大小、位置都一樣,是有可能對應的原始信息不一樣的,這是因為二維碼的編碼,是原始信息+糾錯級別+編碼類型(數字、字母、漢字 等)+版本信息四項因子一起構造的,兩個不同的信息,比如www.baidu.com和“周杰倫”,如果選擇的糾錯級別、編碼類型、二維碼版本不一樣,是可能生成“長相”完全一致的二維碼的。如果兩張“長相”一樣的二維碼,而且糾錯級別、編碼類型、版本信息也完全一致,那麼逆推出的原始信息,一定是一樣的。

衍生問題

有朋友可能會繼續問,既然能被生成二維碼的信息是有限的,那麼總有一天所有組合都被人類用完了,這個時候肯定會出現重複的二維碼,這個怎麼保證安全呢?事實上,二維碼除了以上維度以外,還有一個時間維度,二維碼分靜態二維碼和動態二維碼,靜態二維碼永遠有效,而動態二維碼則在一定時間內有效,比如支付寶的付款碼,這有點像計算機中的HDCP動態分配IP地址技術,如果某個用戶下線了,那麼他的IP地址會分配給新上線的用戶,這樣就能保證一個局域網內的IP地址夠用的,當然如果用戶量達到上限,還是要新增IP地址範圍的,這也是IPv6存在的主要原因。

結束語

時間關係,先解釋這麼多,應該可以解答題主的疑問了。以上信息主要信息來自於我研究生期間看過的幾篇論文,是我個人的理解,如果有錯誤,歡迎指正。

我是科技民兵,一個有溫度的科技作者,如果對於這個話題有想說的,可以在下面留言給我。


科技民兵


要想了解為什麼二維碼可以存儲那麼多信息,或者擁有如此多排列可能,每天要生成那麼多二維碼,為什麼不會有一模一樣的生成呢!我們要先了解二維碼的生成原理和工作方式。

二維碼又稱QR Code,QR全稱Quick Response,是一個近幾年來移動設備上超流行的一種編碼方式,它比傳統的Bar Code條形碼能存更多的信息,也能表示更多的數據類型:比如:字符,數字,日文,中文等等。

二維碼一共有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 的正方形。

簡單來說,二維碼組合方式多,生成的信息容量大不會影響使用。每個二維碼承載的信息都是一個獨特的信息,不會出現重複的情況。

所以不用擔心二維碼多重複的情況。

二維碼是用某種特定的幾何圖案按照一定的規律在平面中分佈的黑白相間的圖形記錄數據符號第一代條碼技術,它是由一個二維碼矩陣圖形和一個二維碼號以及下方的說明文字組成的,它具有信息量大、糾錯能力強、識讀速度快、全方面識讀等特點,手機二維碼是可以印刷在報紙、雜誌、廣告、圖書包裝等多種載體長,通過解碼器也就是掃描軟件解讀其內容,通常這個內容是一個網址或者是一組數字或文字。

所謂的,二維碼可以記錄地球上的每一粒沙子,這句話,是真的!並不是誇大其實

修改一下,再仔細講一講!這次圖文並茂的講!

二維碼就是把信息翻譯成黑白小方塊,然後填到這個大方塊裡。

這有點類似於中學考試中用的答題卡,就是把信息變成機器可掃描的圖案,一秒鐘就能知道你得了多少分。當然,二維碼的原理和答題卡還不太一樣,這個我們稍後會講到。

我們先來介紹二維碼的哥哥——條形碼,也就是超市收銀員掃的那個黑白條。電腦在水平方向上識別粗細不均的黑白條,就能找出藏在其中的商品編號信息。

相比於只在一個維度上攜帶信息的條形碼, “二維碼”在水平、垂直兩個維度上,都攜帶了信息,也就做成了這個方塊狀的樣子。

條形碼和二維碼這一對好兄弟,說白了,其實就是給數字、字母、符號等這些字符,換了一身衣服,把它們打扮成了能被手機相機識別的黑白條或塊。

那麼,最關鍵的問題來了,這些字符,到底是怎麼變成這種二維碼圖案的呢?

這就要提到一個人類具有劃時代意義的偉大發明:二進制。

我們平時使用的數字、字母、漢字等各種字符,雖然畫風完全不同,但是機智的人類,發明了一個方法,使它們都可以被統一轉換成由0和1組成的二進制數字序列。

這個轉換的過程叫做編碼。國際上有幾套通用的編碼規則,我們今天就用一個例子來感受一下,編碼是怎麼回事(字幕QR碼通用編碼規則 ISO18004)。

比如AB這個由兩個英文字母組成的字符。

根據編碼規則,每一個獨立的英文字母都有唯一一個十進制數字與之對應(畫表)。

而像AB這樣的字符串,則要在對應數字的基礎上再做運算。,

而運算結果再轉化成二進制,就是這一串數字。

哦對了,整個計算機和互聯網文明,都是建立在這種二進制編碼上的。你現在看的這個視頻,在你的手機裡,其實也只是一串0和1而已。、

=======我是分割線==========

我們回到二維碼的生成原理上。字符在變成只有0和1組成的數字序列後,再進行一系列優化算法,就得到了最終的二進制編碼。

在最後這串編碼中,一個0對應的就是一個白色小方塊,一個1對應的就是一個黑色小方塊,我們把這些小方塊,按照8個一組,填進大方塊裡,這就是一個完整的,可以被手機相機識別的二維碼圖案了。

這就是二維碼的基本原理了。


充電室


首先,二維碼用黑白圖形記錄數據符號信息,這些圖形按照一定的規則以一定的幾何圖形分佈在一個平面(二維方向)上。在代碼編譯中,巧妙地利用了構成計算機內部邏輯基礎的“0”和“1”的概念,並用與二進制相對應的幾種幾何形狀來表示文字數字信息。自動信息處理可通過@ K 158390050輸入裝置或光電掃描裝置自動讀取來實現;它具有條形碼技術的一些共同特點:每個編碼系統都有自己特定的字符集。每個字符都有一定的寬度;它具有一定的檢測功能等。同時,它還具有自動識別不同線條信息和處理圖形旋轉變化點的功能。

其次,二維碼分為堆疊型和矩陣型。目前,矩陣類型是常用的,有幾種矩陣類型,包括code one和qrcode。二維碼現在有多達40個版本。這裡的版本指的是不同的尺寸,從21*21模塊到177*177模塊,具有不同的尺寸和容量。但是,即使們的大小相同,生成的二維碼也會因容錯率不同而有所不同。

此外,二維碼具有容錯機制。當生成二維碼時,將添加一些檢查信息,以確保在圖片識別度較低時仍然可以讀取內容。這兩張地圖的支票信息比例不同,因此結果也不同。


科普有道


二維碼由於結構,錯誤修正係數各項設定需注意.如無認識,就算輸入內容不同也難保目視一樣.何況用不同的軟件製作的二維碼.


分享到:


相關文章: