我的位置: 首頁 > 學(xué)習(xí)專區(qū) > 安卓技術(shù) > 二維碼的生成細(xì)節(jié)和原理

二維碼的生成細(xì)節(jié)和原理

2014-04-23 10:04:06
來源:學(xué)術(shù)部
[導(dǎo)讀] 二維碼又稱QR Code,QR全稱Quick Response,是一個近幾年來移動設(shè)備上超流行的一種編碼方式,它比傳統(tǒng)的Bar Code條形碼能存更多的信息,

下,對于單個編碼的2進(jìn)制的位數(shù)。(在二維碼的規(guī)格說明書中,有各種各樣的編碼規(guī)范表,后面還會提到)

 

 

下面我們看幾個示例,

示例一:數(shù)字編碼

在Version 1的尺寸下,糾錯級別為H的情況下,編碼: 01234567

1. 把上述數(shù)字分成三組: 012 345 67

2. 把他們轉(zhuǎn)成二進(jìn)制: 012 轉(zhuǎn)成 0000001100; 345 轉(zhuǎn)成 0101011001; 67 轉(zhuǎn)成 1000011。

3. 把這三個二進(jìn)制串起來: 0000001100 0101011001 1000011

4. 把數(shù)字的個數(shù)轉(zhuǎn)成二進(jìn)制 (version 1-H是10 bits ):8個數(shù)字的二進(jìn)制是 0000001000

5. 把數(shù)字編碼的標(biāo)志0001和第4步的編碼加到前面: 0001 0000001000 0000001100 0101011001 1000011

示例二:字符編碼

在Version 1的尺寸下,糾錯級別為H的情況下,編碼: AC-42

1. 從字符索引表中找到 AC-42 這五個字條的索引 (10,12,41,4,2)

2. 兩兩分組: (10,12) (41,4) (2)

3.把每一組轉(zhuǎn)成11bits的二進(jìn)制:

(10,12) 10*45+12 等于 462 轉(zhuǎn)成 00111001110

(41,4) 41*45+4 等于 1849 轉(zhuǎn)成 11100111001

(2) 等于 2 轉(zhuǎn)成 000010

4. 把這些二進(jìn)制連接起來:00111001110 11100111001 000010

5. 把字符的個數(shù)轉(zhuǎn)成二進(jìn)制 (Version 1-H為9 bits ):5個字符,5轉(zhuǎn)成 000000101

6. 在頭上加上編碼標(biāo)識 0010 和第5步的個數(shù)編碼: 0010 000000101 00111001110 11100111001 000010

結(jié)束符和補齊符

假如我們有個HELLO WORLD的字符串要編碼,根據(jù)上面的示例二,我們可以得到下面的編碼,

編碼字符數(shù)HELLO WORLD的編碼

001000000101101100001011 01111000110 10001011100 10110111000 10011010100 001101

我們還要加上結(jié)束符:

編碼字符數(shù)HELLO WORLD的編碼結(jié)束

001000000101101100001011 01111000110 10001011100 10110111000 10011010100 0011010000

按8bits重排

如果所有的編碼加起來不是8個倍數(shù)我們還要在后面加上足夠的0,比如上面一共有78個bits,所以,我們還要加上2個0,然后按8個bits分好組:

00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 01000000

補齊碼(Padding Bytes)

最后,如果如果還沒有達(dá)到我們最大的bits數(shù)的限制,我們還要加一些補齊碼(Padding Bytes),Padding Bytes就是重復(fù)下面的兩個bytes:11101100 00010001 (這兩個二進(jìn)制轉(zhuǎn)成十進(jìn)制是236和17,我也不知道為什么,只知道Spec上是這么寫的)關(guān)于每一個Version的每一種糾錯級別的最大Bits限制,可以參看QR Code Spec的第28頁到32頁的Table-7一表。

假設(shè)我們需要編碼的是Version 1的Q糾錯級,那么,其最大需要104個bits,而我們上面只有80個bits,所以,還需要補24個bits,也就是需要3個Padding Bytes,我們就添加三個,于是得到下面的編碼:

00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 0100000011101100 00010001 11101100

上面的編碼就是數(shù)據(jù)碼了,叫Data Codewords,每一個8bits叫一個codeword,我們還要對這些數(shù)據(jù)碼加上糾錯信息。

糾錯碼

上面我們說到了一些糾錯級別,Error Correction Code Level,二維碼中有四種級別的糾錯,這就是為什么二維碼有殘缺還能掃出來,也就是為什么有人在二維碼的中心位置加入圖標(biāo)。

錯誤修正容量

L水平7%的字碼可被修正

M水平15%的字碼可被修正

Q水平25%的字碼可被修正

H水平30%的字碼可被修正

那么,QR是怎么對數(shù)據(jù)碼加上糾錯碼的?首先,我們需要對數(shù)據(jù)碼進(jìn)行分組,也就是分成不同的Block,然后對各個Block進(jìn)行糾錯編碼,對于如何分組,我們可以查看QR Code Spec的第33頁到44頁的Table-13到Table-22的定義表。注意最后兩列:

Number of Error Code Correction Blocks:需要分多少個塊。

Error Correction Code Per Blocks:每一個塊中的code個數(shù),所謂的code的個數(shù),也就是有多少個8bits的字節(jié)。

 

 

舉個例子:上述的Version 5 + Q糾

評論
熱點專題
>>
相關(guān)文章推薦
>>
初中畢業(yè)學(xué)軟件開發(fā)難嗎 初中畢業(yè)學(xué)什么技術(shù)好 中專學(xué)校有哪些 中專學(xué)什么專業(yè)好 中專學(xué)什么好 中考沒考上怎么辦 中考落榜生怎么辦 怎么樣學(xué)電腦專業(yè) 中專學(xué)歷學(xué)什么好 職校學(xué)什么專業(yè)好 職業(yè)技術(shù)學(xué)校專業(yè) 職業(yè)技術(shù)學(xué)校有哪些專業(yè) 職業(yè)高中有哪些專業(yè) 職校讀什么專業(yè)好 第三屆明日之星形象代言人大賽 北大青鳥學(xué)士后培訓(xùn) 招高考落榜生的學(xué)校 怎樣學(xué)軟件專業(yè) 高中生沒考上大學(xué)學(xué)電腦怎么樣 考不上大學(xué)學(xué)什么好 高考300多分能上什么學(xué)校 考不上大學(xué)怎么辦? 籃球賽 深圳南山北大青鳥 高考志愿填報 高考落榜學(xué)什么好就業(yè) 高考落榜了怎么辦 學(xué)什么專業(yè)技術(shù)好 學(xué)什么專業(yè)好賺錢 女孩子高考落榜怎么辦 高考落榜還能上大學(xué)嗎 學(xué)什么專業(yè)最有前途 低分考生學(xué)什么好 高考低分考生怎么辦 高中生畢業(yè)后怎么樣選擇學(xué)校 高考300多分可以上什么學(xué)校 高中生選什么專業(yè)好就業(yè) 低分 高考成績不理想怎么辦 學(xué)什么專業(yè)好找工作 學(xué)什么專業(yè)工資高 學(xué)什么好專業(yè) 學(xué)什么電腦專業(yè)好 學(xué)什么電腦專業(yè) 學(xué)習(xí)什么專業(yè)有前途
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
中文字幕制服丝袜日韩专区 | 日本无吗无卡v免费清高清 亚洲女人自熨在线视频 | 亚洲夜夜性夜综合久久 | 在线观看最新中文字幕AV | 在线a亚洲老鸭窝天堂 | 五月综合激情国产 |