一、二維碼怎么生成
基礎知識首先,我們先說一下二維碼一共有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)的二維碼需要這個東東,同樣是為了定位用的.功能性數(shù)據(jù)Format Information 存在于所有的尺寸中,用于存放一些格式化數(shù)據(jù)的.Version Information 在 >= Version 7以上,需要預留兩塊3 x 6的區(qū)域存放一些版本信息.數(shù)據(jù)碼和糾錯碼除了上述的那些地方,剩下的地方存放 Data Code 數(shù)據(jù)碼 和 Error Correction Code 糾錯碼.數(shù)據(jù)編碼我們先來說說數(shù)據(jù)編碼.QR碼支持如下的編碼:Numeric mode 數(shù)字編碼,從0到9.如果需要編碼的數(shù)字的個數(shù)不是3的倍數(shù),那么,最后剩下的1或2位數(shù)會被轉(zhuǎn)成4或7bits,則其它的每3位數(shù)字會被編成 10,12,14bits,編成多長還要看二維碼的尺寸(下面有一個表Table 3說明了這點)Alphanumeric mode 字符編碼.包括 0-9,大寫的A到Z(沒有小寫),以及符號$ % * + – . / : 包括空格.這些字符會映射成一個字符索引表.如下所示:(其中的SP是空格,Char是字符,Value是其索引值) 編碼的過程是把字符兩兩分組,然后轉(zhuǎn)成下表的45進制,然后轉(zhuǎn)成11bits的二進制,如果最后有一個落單的,那就轉(zhuǎn)成6bits的二進制.而編碼模式和字符的個數(shù)需要根據(jù)不同的Version尺寸編成9, 11或13個二進制(如下表中Table 3)Byte mode, 字節(jié)編碼,可以是0-255的ISO-8859-1字符.有些二維碼的掃描器可以自動檢測是否是UTF-8的編碼.Kanji mode 這是日文編碼,也是雙字節(jié)編碼.同樣,也可以用于中文編碼.日文和漢字的編碼會減去一個值.如:在0X8140 to 0X9FFC中的字符會減去8140,在0XE040到0XEBBF中的字符要減去0XC140,然后把結果前兩個16進制位拿出來乘以0XC0,然后再加上后兩個16進制位,最后轉(zhuǎn)成13bit的編碼.如下圖示例:Extended Channel Interpretation (ECI) mode 主要用于特殊的字符集.并不是所有的掃描器都支持這種編碼.Structured Append mode 用于混合編碼,也就是說,這個二維碼中包含了多種編碼格式.FNC1 mode 這種編碼方式主要是給一些特殊的工業(yè)或行業(yè)用的.比如GS1條形碼之類的.簡單起見,后面三種不會在本文 中討論.下面兩張表中,Table 2 是各個編碼格式的“編號”,這個東西要寫在Format Information中.注:中文是1101Table 3 表示了,不同版本(尺寸)的二維碼,對于,數(shù)字,字符,字節(jié)和Kanji模式下,對于單個編碼的2進制的位數(shù).(在二維碼的規(guī)格說明書中,有各種各樣的編碼規(guī)范表,后面還會提到)下面我們看幾個示例,示例一:數(shù)字編碼在Version 1的尺寸下,糾錯級別為H的情況下,編碼: 012345671. 把上述數(shù)字分成三組: 012 345 672. 把他們轉(zhuǎn)成二進制: 012 轉(zhuǎn)成 0000001100; 345 轉(zhuǎn)成 0101011001; 67 轉(zhuǎn)成 1000011.3. 把這三個二進制串起來: 0000001100 0101011001 10000114. 把數(shù)字的個數(shù)轉(zhuǎn)成二進制 (version 1-H是10 bits ): 8個數(shù)字的二進制是 00000010005. 把數(shù)字編碼的標志0001和第4步的編碼加到前面: 0001 0000001000 0000001100 0101011001 1000011示例二:字符編碼在Version 1的尺寸下,糾錯級別為H的情況下,編碼: AC-421. 從字符索引表中找到 AC-42 這五個字條的索引 (10,12,41,4,2)2. 兩兩分組: (10,12) (41,4) (2)3.把每一組轉(zhuǎn)成11bits的二進制:(10,12) 10*45+12 等于 462 轉(zhuǎn)成 00111001110(41,4) 41*45+4 等于 1849 轉(zhuǎn)成 11100111001(2) 等于 2 轉(zhuǎn)成 0000104. 把這些二進制連接起來:00111001110 11100111001 0000105. 把字符的個數(shù)轉(zhuǎn)成二進制 (Version 1-H為9 bits ): 5個字符,5轉(zhuǎn)成 0000001016. 在頭上加上編碼標識 0010 和第5步的個數(shù)編碼: 0010 000000101 00111001110 11100111001 000010結束符和補齊符假如我們有個HELLO WORLD的字符串要編碼,根據(jù)上面的示例二,我們可以得到下面的編碼,編碼字符數(shù)HELLO WORLD的編碼0010 000001011 01100001011 01111000110 10001011100 10110111000 10011010100 001101 我們還要加上結束符:編碼字符數(shù)HELLO WORLD的編碼結束0010 000001011 01100001011 01111000110 10001011100 10110111000 10011010100 001101 0000 按8bits重排如果所有的編碼加起來不是8個倍數(shù)我們還要在后面加上足夠的0,比如上面一共有78個bits,所以,我們還要加上2個0,然后按8個bits分好組:00100000 01011011 00001011 01111000 11010001 01110010 11011100 01001101 01000011 。
二、二維碼怎樣生成
二維條碼(二維碼)是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向)分布的黑白相間的圖形記錄數(shù)據(jù)符號信息的。
二維碼是DOI(Digital Object Unique Identifier,數(shù)字對象唯一識別符)的一種,全球最大的二維碼資源中心是“渡云” ,為全球用戶統(tǒng)一提供了“唯一數(shù)據(jù)樣本”的物品、人員、組織二維碼識別信息。 [1] 在代碼編制上巧妙地利用構成計算機內(nèi)部邏輯基礎的“0”、“1”比特流的概念,使用若干個與二進制相對應的幾何形體來表示文字數(shù)值信息,通過圖象輸入設備或光電掃描設備自動識讀以實現(xiàn)信息自動處理。
在許多種類的二維條碼中,常用的碼制有:Data Matrix,MaxiCode, Aztec,QR Code, Vericode,PDF417,Ultracode, Code 49, Code 16K 等,QR Code碼是1994年由日本DW公司發(fā)明。 QR來自英文「Quick Response」的縮寫,即快速反應的意思,源自發(fā)明者希望QR碼可讓其內(nèi)容快速被解碼。
QR碼最常見于日本、韓國;并為目前日本最流行的二維空間條碼。但二維碼的安全性也正備受挑戰(zhàn),帶有惡意軟件和病毒正成為二維碼普及道路上的絆腳石。
發(fā)展與防范二維碼的濫用正成為一個亟待解決的問題。 每種碼制有其特定的字符集;每個字符占有一定的寬度;具有一定的校驗功能等。
同時還具有對不同行的信息自動識別功能及處理圖形旋轉(zhuǎn)變化等特點。 二維碼是一種比一維碼更高級的條碼格式。
一維碼只能在一個方向(一般是水平方向)上表達信息,而二維碼在水平和垂直方向都可以存儲信息。 一維碼只能由數(shù)字和字母組成,而二維碼能存儲漢字、數(shù)字和圖片等信息,因此二維碼的應用領域要廣得多。
二維碼的原理可以從矩陣式二維碼的原理和行列式二維碼的原理來講述。 矩陣式原理 矩陣式二維碼(又稱棋盤式二維碼)是在一個矩形空間通過黑、白像素在矩陣中的不同分布進行編碼。
在矩陣元素位置上,出現(xiàn)方點、圓點或其他形狀點表示二進制“1”,不出現(xiàn)點表示二進制的“0”,點的排列組合確定了矩陣式二維碼所代表的意義。矩陣式二維碼是建立在計算機圖像處理技術、組合編碼原理等基礎上的一種新型圖形符號自動識讀處理碼制。
具有代表性的矩陣式二維碼有:Code One、Maxi Code、QR Code、Data Matrix等。 圖21*21的矩陣中,黑白的區(qū)域在QR碼規(guī)范中被指定為固定的位置,稱為尋像圖形(finder pattern)和定位圖形(timingpattern)。
尋像圖形和定位圖形用來幫助解碼程序確定圖形中具體符號的坐標。黃色的區(qū)域用來保存被編碼的數(shù)據(jù)內(nèi)容以及糾錯信息碼。
藍色的區(qū)域,用來標識糾錯的級別(也就是Level L到Level H)和所謂的"Mask pattern",這個區(qū)域被稱為“格式化信息”(format information)。 矩陣式二維碼原理 行排式原理 行排式二維碼(又稱:堆積式二維碼或?qū)优攀蕉S碼),其編碼原理是建立在一維碼基礎之上,按需要堆積成二行或多行。
它在編碼設計、校驗原理、識讀方式等方面繼承了一維碼的一些特點,識讀設備與條碼印刷與一維碼技術兼容。但由于行數(shù)的增加,需要對行進行判定、其譯碼算法與軟件也不完全相同于一維碼。
有代表性的行排式二維碼有CODE49、CODE 16K、PDF417等。 其中的CODE49,是1987年由 David Allair 博士研制,Intermec 公司推出的第一個二維碼。