1 二維碼
二維碼又稱二維條碼,常見的二維碼為QR Code,QR全稱Quick Response,是一種編碼方式。它比傳統(tǒng)的Bar Code條形碼能存更多的信息,也能表示更多的數(shù)據(jù)類型。
二維條碼/二維碼(2-dimensional bar code)是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的、黑白相間的、記錄數(shù)據(jù)符號信息的圖形;在代碼編制上巧妙地利用構(gòu)成計(jì)算機(jī)內(nèi)部邏輯基礎(chǔ)的“0”、“1”比特流的概念,使用若干個(gè)與二進(jìn)制相對應(yīng)的幾何形體來表示文字?jǐn)?shù)值信息,通過圖象輸入設(shè)備或光電掃描設(shè)備自動識讀以實(shí)現(xiàn)信息自動處理:它具有條碼技術(shù)的一些共性:每種碼制有其特定的字符集;每個(gè)字符占有一定的寬度;具有一定的校驗(yàn)功能等。同時(shí)還具有對不同行的信息自動識別功能、及處理圖形旋轉(zhuǎn)變化點(diǎn)。
簡單來說,將數(shù)據(jù)通過特定的編碼變成'0’和'1’數(shù)據(jù)串。 '0’和'1’ 分別用黑(深)和白(淺)小方塊替代,將黑白小方塊按一定的規(guī)則順序放在二維碼中。當(dāng)用戶使用二維碼讀取器掃描時(shí),通過相應(yīng)的格式讀取出黑白小方塊并替換成相應(yīng)的'0'和'1'串,再通過相應(yīng)的編碼轉(zhuǎn)換成對應(yīng)的數(shù)據(jù)內(nèi)容,如商品編碼,網(wǎng)站鏈接等。
2 二維碼結(jié)構(gòu)
2.1 二維碼的結(jié)構(gòu)圖


2.2 功能圖形(Function Patterns)
2.2.1 版本與大小
二維碼共有40個(gè)版本,分別版本1,版本2,... ,版本40。如下圖是一個(gè)版本1和版本2的大小示意圖以及版本41的示意圖。
版本1的大小是21*21,即21*21個(gè)小方塊組成;版本2的大小是25*25;版本40的大小是177*177。
版本為b和大小為d*d的關(guān)系d=17+4*b,b={1,2,...,40}。


2.2.2 空白區(qū)(Quiet zone)
空白區(qū)為環(huán)繞在符號四周的4個(gè)模塊寬的區(qū)域,其反射率應(yīng)與淺色模塊相同。
2.2.3 尋像圖形(Finder pattern)
尋像圖形包括三個(gè)相同的位置探測圖形(Position Detection Patterns),分別位于符號的左上角、右上角和左下角,如圖所示。每個(gè)位置探測圖形可以看作是由3個(gè)重疊的同心正方形組成,分別為7*7深(黑)色模塊,5*5淺(白)色模塊,3*3深色模塊。位置探測圖形的模塊寬度比為1:1:3:1:1。符號中其他地方遇到類似圖形的可能性極小,因此可以在迅速地識別可能的QR碼符號。識別組成尋像圖形的三個(gè)位置探測圖形,可以明確地確定視場中符號的位置和方向。

2.2.4 分隔符(Separators)
在每個(gè)位置探測圖形和編碼區(qū)域之間有寬度為1個(gè)模塊的分隔符,全部由白色模塊組成。

2.2.5 定位圖形(Timing Patterns)
水平和垂直定位圖形分別為一個(gè)模塊寬的一行和一列,由深色與淺色模塊交替組成,其開始和結(jié)尾都是深色模塊。水平定位圖形位于符號上部的兩個(gè)位置探測圖形之間,在第6行。垂直定位圖形位于符號左側(cè)的兩個(gè)位置探測圖形之間,在第6列。它們的作用是確定符號的密度和版本,提供決定模塊坐標(biāo)的基準(zhǔn)位置。
2.2.6 校正圖形(Alignment Patterns)
每個(gè)校正圖形可看作是3個(gè)重疊的同心正方形﹐由5×5個(gè)的深色模塊,3×3個(gè)的淺色模塊以及位于中心的一個(gè)深色模塊組成。校正圖形的數(shù)量視符號的版本號而定,版本2以上(含版本2)的符號均有校正圖形。
2.3 編碼區(qū)格式
2.3.1 版本信息(Version Information)
版本信息為18位,其中,6位數(shù)據(jù)位,12位通過BCH(18,6)編碼計(jì)算出的糾錯(cuò)位。6位數(shù)據(jù)為版本信息,最高位為第1位。12位糾錯(cuò)信息在6位數(shù)據(jù)之后。
只有版本7~40 的符號包含版本信息,沒有任何版本信息的結(jié)果全為0。所以不必對版本信息進(jìn)行掩模。如圖例子所示。
最終的版本信息應(yīng)映射在符號中預(yù)留的位置。需要注意的是,由于版本信息的正確譯碼是整個(gè)符號正確譯碼的關(guān)鍵,因此版本信息在符號中出現(xiàn)兩次以提供冗余。版本信息的最低位模塊放在編號為0的位置上,最高位放在編號為17的位置上。

6行×3列模塊組成的版本信息塊放在定位圖形的上面,其右側(cè)緊臨右上角位置探測圖形的分隔符3行×6列模塊組成的版本信息塊放在定位圖形的左側(cè),其下邊緊臨左下角位置探測圖形的分隔符。

2.3.2 格式信息(Format Information)
格式信息為15位,其中有5位數(shù)據(jù)位,10位用BCH(15,5)編碼計(jì)算得到的糾錯(cuò)位。第1、2數(shù)據(jù)位是符號的糾錯(cuò)等級,見表13。格式信息數(shù)據(jù)的第3到第5位的內(nèi)容為掩模圖形,如下版本5-H的例子。按糾錯(cuò)位計(jì)算方法計(jì)算10位糾錯(cuò)數(shù)據(jù),并加在5個(gè)數(shù)據(jù)位之后。


隨后,將15位格式信息與掩模圖形101010000010010進(jìn)行XOR運(yùn)算,以確保糾錯(cuò)等級和掩模圖形參考合在一起的結(jié)果不全是0。
格式信息掩模后的結(jié)果應(yīng)映射到符號中為其保留的區(qū)域內(nèi),如下圖所示。需要注意的是,格式信息在符號中出現(xiàn)兩次以提供冗余,因?yàn)樗恼_譯碼對整個(gè)符號的譯碼至關(guān)重要。

2.3.3 編碼過程
a)數(shù)據(jù)分析
分析所輸入的數(shù)據(jù)流,確定要進(jìn)行編碼的字符的類型。
b) 數(shù)據(jù)編碼
采用所定義的規(guī)則,將數(shù)據(jù)字符轉(zhuǎn)換為位流。
c) 糾錯(cuò)編碼
按需要將碼字序列分塊,以便按塊生成相應(yīng)的糾錯(cuò)碼字,并將其加入到相應(yīng)的數(shù)據(jù)碼字序列的后面。
d) 構(gòu)造最終信息
在每一塊中置入數(shù)據(jù)和糾錯(cuò)碼字,必要時(shí)加剩余位。 e) 在矩陣中布置模塊
將尋像圖形、分隔符、定位圖形、校正圖形與碼字模塊一起放入矩陣。 f) 掩模
用8種掩模圖形依次對符號的編碼區(qū)域的位圖進(jìn)行掩模處理,評價(jià)所得到的8種結(jié)果,選擇最優(yōu)的一種。
g) 格式和版本信息
生成版本信息(如果需要)和格式信息,構(gòu)成符號。
2.3.4 譯碼過程
從識讀一個(gè)QR碼符號到輸出數(shù)據(jù)字符的譯碼步驟是編碼程序的逆過程。
a)定位并獲取符號圖像。深色與淺色模塊識別為由“0”與“1”組成的陣列。
b)識讀格式信息(按需要去除掩模圖形并完成對格式信息模塊的糾錯(cuò),識別糾錯(cuò)等級與掩模圖形參考)。
c) 識讀版本信息(如果應(yīng)用),確定符號的版本。
d) 用掩模圖形(掩模圖形參考已經(jīng)從格式信息中得出)對編碼區(qū)域的位圖進(jìn)行異或處理,消除掩模。
e)根據(jù)模塊排列規(guī)則,識讀符號字符,恢復(fù)信息的數(shù)據(jù)與糾錯(cuò)碼字。
f)用與糾錯(cuò)等級信息相對應(yīng)的糾錯(cuò)碼字檢測錯(cuò)誤,如果發(fā)現(xiàn)錯(cuò)誤,則進(jìn)行糾錯(cuò)。 g)根據(jù)模式指示符和字符計(jì)數(shù)指示符將數(shù)據(jù)碼字劃分成多個(gè)部分。
h)最后﹐按照使用的模式進(jìn)行譯碼,得出數(shù)據(jù)字符并輸出結(jié)果。
需要細(xì)究的可參考標(biāo)準(zhǔn)。
參考文獻(xiàn):
GB/T18284—2000 快速響應(yīng)矩陣碼
ISO/IEC 18004:2000 pdf 知乎-二維碼原理
3 二維碼功能
(1)信息獲?。⒌貓D、WIFI密碼、資料)
(2)網(wǎng)站跳轉(zhuǎn)(跳轉(zhuǎn)到微博、手機(jī)網(wǎng)站、網(wǎng)站)
(3)廣告推送(用戶掃碼,直接瀏覽商家推送的視頻、音頻廣告)
(4)手機(jī)電商(用戶掃碼、手機(jī)直接購物下單)
(5)防偽溯源(用戶掃碼、即可查看生產(chǎn)地;同時(shí)后臺可以獲取最終消費(fèi)地)
(6)優(yōu)惠促銷(用戶掃碼,下載電子優(yōu)惠券,抽獎)
(7)會員管理(用戶手機(jī)上獲取電子會員信息、VIP服務(wù))
(8)手機(jī)支付(掃描商品二維碼,通過銀行或第三方支付提供的手機(jī)端通道完成支付)
(9)賬號登錄(掃描二維碼進(jìn)行各個(gè)網(wǎng)站或軟件的登錄)