二維碼這麼火,它的原理是什麼?
談起二維碼,我們很容易聯想到條形碼(一維碼),沒錯,就是在超市買東西的時候每個商品後面的那個條形碼。或者是你拿快遞時,快遞單上的碼。
不論是二維碼還是條形碼,其目的,就是為了表示產品的信息(編號、圖片、網站鏈接等),方便電腦識別,從而提高效率。
如果要讓計算機識別,那麼勢必要使用計算機的語言:二進制。
生活中我們常用的是十進制,有0,1,2,3,4,5,6,7,8,9十個數,而二進制則只有0,1兩個數。
(比如,二進制的110,就是十進制的 0*2^0+1*2^1+1*2^2=6 )
如果此時你細心地觀察二維碼,你會發現,它是由白塊和黑塊組成的。
看到這裡可能已經發現了一點端倪,沒錯,白塊表示的就是二進制的“0”,黑塊就是“1”。
但是,很快我們就會有問題,表示數字可以,那麼如果我們要表示字母怎麼表示?
簡單呀,每個字母有一個對應的數字就行了呀。
於是,ASCII代碼產生了(American Standard Code for Information Interchange,美國信息交換標準代碼)。本來它是美國的標準,後來被定為世界標準。
以下是部分ASCII代碼:
還有其他的特殊符號比如 @、#、¥等也有自己的對應的二級制數字對應。
當然,二維碼有很多種類,生活中常見的便是QRcode。
而QR碼上,不同的區域,則表示著不同的信息。(如下圖)
此處,並不是簡單地直接將信息轉換為前面ASCII碼值,然後“0”和“1”對應黑塊白塊直接填到二維碼中。
不同的編碼方式,有著自己不同的規則。
例如:
一個QRcode下編碼一段數字。
在數字模式下,(數字模式指示符符為0001)
對數據:01234567編碼(版本1-H),
1)分組:012 345 67 (每三個數字一組)
2)轉成二進制:
012→0000001100 ;345→0101011001 ;67 →1000011。
3)轉成序列:0000001100 0101011001 1000011
4)字符的數量8個,8轉化為二進制0000001000,(實際上是1000,前面為了滿足格式而添加了0)
5)加入模式指示符)0001:
最終編碼0001 0000001000 0000001100 0101011001 1000011
其他的區域,有關QR碼版本、格式等信息,以類似的方式編碼,然後填到了二維碼中。(當然,不同種類的二維碼,其編碼方式,圖形中的組合排列方式便不盡相同)
至於二維碼中的位置探測圖形,其實是為了讓手機(或是其他掃描儀器)確定方位用的。掃描的儀器會自動地左上角,右上角,左下角的圖案,從而自動地將二維碼“擺正”。
這樣的話,即使你倒著、側著、或是斜著掃二維碼,都能掃描成功。
綜上,二維碼,就是產品信息在通過各類編碼後,通過特定的排列方式以“0”對應白塊,“1”對應黑塊展示出來的圖形。
閱讀更多 小何聊科技 的文章