1. 程式人生 > >你知道二維碼的圖案原理嗎?

你知道二維碼的圖案原理嗎?

常見的二維碼上為啥三個角上有方塊?二維碼為什麼是黑白相間的?為什麼掃二維碼的一部分也能看到資訊?請看南京郵電大學計算機學院副教授黃海平做詳細分析。二維碼

  隨著蘋果手機的研發及安卓系統的市場鋪張式的發展,使得二維碼,這個不起眼的黑白相間的小方塊,正在悄然改變著我們的生活方式。
 
  當你頻繁和它照面的時候,你有沒有過這樣的好奇:為什麼用手機掃一下就會看到一個“花花世界”?二維碼的顏色為什麼是黑白相間的呢?這些不規則幾何圖形中究竟藏著怎樣的“祕密”?
 
  常見的二維碼上為啥三個角上有方塊?

   極客社

  這是三個定位點,圖形旋轉也不影響識別
 
  要了解二維碼的原理,我們先要來好好認識一下它。現在最常見的二維碼是OR二維碼(OR是一種碼制),我們便以它為例。
 
  我們看一個二維碼,最先看到的當然是幾何圖形。這些圖形中,藏了不少重要的“部件”。極客社邀請南京郵電大學計算機學院副教授黃海平給我們做了詳細分析。
 
  首先,OR二維碼的三個“角”上有三個方塊,可別小瞧這方塊,它叫位置探測圖形。有了這三個點,不管是從哪個方向讀取二維碼,資訊都可以被識別。即使將二維碼圖形旋轉,也可以識別。也許你會問,為什麼不是四個角上都有方塊呢?事實上,是可以設更多的點,但幾何知識告訴我們,3點就可以確定一個平面,節省出的一個角可以嵌入更多資訊。
 
  另外,二維碼上還有一些圖形混雜在幾何圖形中,是肉眼看不出來的,比如定點陣圖形和分隔符。定點陣圖形就是圖中連線三個位置探測圖形之間的兩根“線”,它的作用是決定二維碼符號中模組的座標,而分隔符的作用是將位置探測圖形與符號的其餘部分分開。也就是說,通過掃描能讀取的資料資訊在二維碼中的位置是由定點陣圖形和分隔符決定的。
 
  還有兩個圖形肉眼也難以發現,位於左下角位置探測圖形上面的是“版本資訊”,每個二維碼都有一個版本號,我們常說的V1.0、V2.0就是版本;包圍在三個位置探測圖形周邊的則是“格式資訊”,這指的是這個二維碼採用的編碼格式。
 
 
  二維碼為什麼是黑白相間的?


 
  黑色表示二進位制的“1”,白色表示二進位制的“0”
 
  “我們之所以對二維碼進行掃描能讀出那麼多資訊,就是因為這些資訊被編入了二維碼之中。”黃海平說,“製作二維碼輸入的資訊可以分成三類,文字資訊,比如名片資訊;字元資訊,比如網址、電話號碼;還有圖片資訊,甚至還可以包括簡短的視訊。”
 
  資料資訊是怎麼被編入的呢?資訊輸入後,首先要選擇一種資訊編碼的碼制。現在常見的二維碼都是以QR碼作為編碼的碼制。
 
  QR碼是矩陣式二維碼,它是在一個矩形空間內,通過黑、白畫素在矩陣中的不同分佈,來進行編碼的。我們知道電腦使用二進位制(0和1)數來貯存和處理資料,而在二維碼中,用黑白矩形表示二進位制資料我們肉眼能看到的黑色表示的是二進位制“1”,白色表示二進位制的“0”,黑白的排列組合確定了矩陣式二維條碼的內容,以便於計算機對二維碼符號進行編碼和分析。
 
  為了讓我們更形象地瞭解,黃海平對資訊“bcde”進行了QR編碼(同時為了防洩露置入了金鑰“a”,這是為了保護資訊),這樣經過編碼,就出現了一個全部由0和1組成矩形的排列。由這個資訊又生成了二維碼。
 
  至於資料資訊到底在黑白相間的矩形中的什麼位置,非專業人士是無法知曉的,“這都是後臺的工作了,QR碼有自動的規則,將資訊安排在二維碼相應的位置。”黃海平說。
 
  和資料資訊混在一起編入二維碼的還有糾錯碼資訊。這是因為當我們對二維碼進行掃描時,不能保證掃的每一位資訊都正確,這就需要依賴糾錯碼資訊了。
 
  此外,二維碼中還藏著非常重要的校正圖形。當二維碼遭到汙染或者破壞時,校正圖形保證了沒有被破壞的資訊仍然可以被識別。也就是說,我們掃描讀出的資訊在二維碼中備份了很多份。“即使二維碼的損毀面積高達50%,資訊仍然可以讀取。”這也就是我們對著一個二維碼掃描時,不需要只掃描整個圖形,而只對著圖形的某一個部分,就可能成功獲取資訊的原因。不信你可以試試!
 
  說到這裡,掃描二維碼為什麼能讀取資訊就好理解了。“在我們用光電掃描器或者手機智慧終端的掃描軟體進行掃描時,其實是一個解碼的過程,解碼恰恰是編碼的逆過程。具體說來,是位置探測圖形定位二維碼的區域,根據二維碼的編碼格式資訊和糾錯碼,對資料進行解讀。如果編碼時經過加密處理,解碼時則需要加密時的金鑰資訊。”
 
  也許你有個疑問,此前條形碼在生活裡也已經有諸多應用,比如超市貨架上的東西都有條形碼,二維碼相比條形碼有什麼優點呢?黃海平說,條形碼是一維的,而二維碼是採用縱橫向編碼的,儲存的資訊量就大很多。有資料顯示,最多可記錄1850個大寫字母,2710個數字或500多個漢字。另外,二維碼的空間利用率高;二維碼除了常見的OR碼,還可以用其他碼制進行編碼。還有,前面說到的糾錯能力和校正能力,以及加密功能,都是二維碼的優勢。
 
  為什麼掃二維碼的一部分也能看到資訊?
那是因為校正圖形藏在二維碼中,具有多個數據信息備份,所以,我們掃描一部分二維碼也能顯示出全部的資訊來。