我的位置: 首頁 > 學習專區 > 安卓技術 > 二維碼的生成細節和原理

二維碼的生成細節和原理

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

二維碼又稱QR Code,QR全稱Quick Response,是一個近幾年來移動設備上超流行的一種編碼方式,它比傳統的Bar Code條形碼能存更多的信息,也能表示更多的數據類型:比如:字符,數字,日文,中文等等。這兩天學習了一下二維碼圖片生成的相關細節,覺得這個玩意就是一個密碼算法,在此寫一這篇文章 ,揭露一下。供好學的人一同學習之。

關于QR Code Specification,可參看這個PDF:http://raidenii.net/files/datasheets/misc/qr_code.pdf

基礎知識

首先,我們先說一下二維碼一共有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 的正方形。

下面我們看看一個二維碼的樣例:

 

 

定位圖案

Position Detection Pattern是定位圖案,用于標記二維碼的矩形大小。這三個定位圖案有白邊叫Separators for Postion Detection Patterns。之所以三個而不是四個意思就是三個就可以標識一個矩形了。

Timing Patterns也是用于定位的。原因是二維碼有40種尺寸,尺寸過大了后需要有根標準線,不然掃描的時候可能會掃歪了。

Alignment Patterns 只有Version 2以上(包括Version2)的二維碼需要這個東東,同樣是為了定位用的。

功能性數據

Format Information 存在于所有的尺寸中,用于存放一些格式化數據的。

Version Information 在 >= Version 7以上,需要預留兩塊3 x 6的區域存放一些版本信息。

數據碼和糾錯碼

除了上述的那些地方,剩下的地方存放 Data Code 數據碼 和 Error Correction Code 糾錯碼。

數據編碼

我們先來說說數據編碼。QR碼支持如下的編碼:

Numeric mode數字編碼,從0到9。如果需要編碼的數字的個數不是3的倍數,那么,最后剩下的1或2位數會被轉成4或7bits,則其它的每3位數字會被編成 10,12,14bits,編成多長還要看二維碼的尺寸(下面有一個表Table 3說明了這點)

Alphanumeric mode字符編碼。包括 0-9,大寫的A到Z(沒有小寫),以及符號$ % * + – . / : 包括空格。這些字符會映射成一個字符索引表。如下所示:(其中的SP是空格,Char是字符,Value是其索引值) 編碼的過程是把字符兩兩分組,然后轉成下表的45進制,然后轉成11bits的二進制,如果最后有一個落單的,那就轉成6bits的二進制。而編碼模式和字符的個數需要根據不同的Version尺寸編成9, 11或13個二進制(如下表中Table 3)

 

 

Byte mode, 字節編碼,可以是0-255的ISO-8859-1字符。有些二維碼的掃描器可以自動檢測是否是UTF-8的編碼。

Kanji mode這是日文編碼,也是雙字節編碼。同樣,也可以用于中文編碼。日文和漢字的編碼會減去一個值。如:在0X8140 to 0X9FFC中的字符會減去8140,在0XE040到0XEBBF中的字符要減去0XC140,然后把結果前兩個16進制位拿出來乘以0XC0,然后再加上后兩個16進制位,最后轉成13bit的編碼。如下圖示例:

 

 

Extended Channel Interpretation (ECI) mode主要用于特殊的字符集。并不是所有的掃描器都支持這種編碼。

Structured Append mode用于混合編碼,也就是說,這個二維碼中包含了多種編碼格式。

FNC1 mode這種編碼方式主要是給一些特殊的工業或行業用的。比如GS1條形碼之類的。

簡單起見,后面三種不會在本文 中討論。

下面兩張表中,

Table 2 是各個編碼格式的“編號”,這個東西要寫在Format Information中。注:中文是1101

Table 3 表示了,不同版本(尺寸)的二維碼,對于,數字,字符,字節和Kanji模式

評論
熱點專題
>>
相關文章推薦
>>
好吊妞免费视频在线观看,久久亚洲国产人成综合网,久久精品国产2020,欧美精品综合在线
午夜影院在线亚洲 | 日本一本久a久久精品综合 亚洲一级人成字幕 | 中文字幕九热精品视频在线 | 亚洲国产精品综合久久网络 | 中文字幕精品制服丝袜 | 日本中文字幕中出在线 |