轉載請注明出處
1.1選擇糾錯級
對數據進行編碼前,需要選擇數據的校正級別。QR碼使用的是Reed-Solomon糾錯。它是在編碼數據的基礎上創建糾錯碼字(字節)。根據糾錯碼字來確定QR碼識別器有沒有正確讀取數據,并且可以糾正這些錯誤。糾錯等級一共有四種,分別為L、M、Q、H。每個等級糾錯數據的能力也不一樣,見Table1所示。
1.2確定數據的最小版本
每個版本所含有的信息量不同,版本越高,承載信息量就越大。在實際設計中,我們應該根據要顯示的信息大小選擇最小的版本。
1.3添加模式選擇代碼
各種模式代碼如Table2所示
各種版本所對應的不同編碼模式字符串長度轉換二進制后位數見Table3所示。
1.5四種編碼模式的編碼過程
1.5.1數字模式編碼
①從左往右(或從高位到低位)3位一組
②將每組十進制數轉換為10位二進制數
③末尾數字不足3位,可能是1位/2位,將其分別轉換為4bits/7bits。
Eg2.5.1字符串為4637856
4637856→463 785 6
463→0111001111 ? ? ? ? 6->0110
Result: 0111001111 1100010001 0110
Eg2.5.1字符串為46378568
4637856→463785 68
463→011100111168→1000100
Result: 0111001111 1100010001 1000100
1.5.2字母數字模式編碼
①從左往右,2位一組
②查Table
3.2-4得出每一字符所對應的數字將每組轉換為45進制數(滿足公式a*45+b,a:高位數,b:為低位數),然后再將其轉換為11bits二進制
③如果右邊剩下一個字符,查Table
3.2-4所得的數字將轉換為6bits二進制數
注意:字母數字模式編碼所支持的字符都在Table4中,小寫英文字母是不支持的。
Eg2.5.3UTER:H
UTER:H→UT ER:H
UT→30*45+29→1379→10101100011
Result:10101100011 01010010001 11111001101
Eg2.5.4 UTER:H%
UTER:H%→UTER :H %
UT→30*45+29→1379→10101100011
%→39→100111
Result:10101100011 01010010001 11111001101 100111
1.5.3字節模式編碼
查JIS8表可得出其8bits二進制數。JIS8表見附錄三
1.5.4漢字模式編碼,
①先查表Shift ?JIS Kanji Code Table得漢字編碼是在0x8140到0x9ffc范圍內,還是0xe040到0xebbf范圍內;
②漢字編碼在0x8140到0x9ffc范圍內,則漢字編碼減去0x8140,如果漢字編碼在0xe040到0xebbf范圍內,則漢字代碼減去0xc140;
③然后把前兩位拿出來乘以0xC0,然后再加上后兩位,最后轉成13bit的編碼。
1.6結束符和補齊符
1.6.1結束碼
結束碼是一種標志,標志著數據編碼的完成。它是由0000標志的。緊跟在數據代碼之后。數據編碼區此時為:數據編碼=模式選擇代碼+字符長度代碼+數據代碼+結束碼(0000)。
湊8bits整(指湊足8bits整倍數):這是在數據編碼編碼之后的。是由一串0組成,具體在數據編碼后添加多少個0,是由數據編碼被8整除后所需要添加最少的0的個數。就是保證此時的數據編碼是8的整數倍。
1.6.2補齊碼
不同版本和不同糾錯級,所容納的比特數也不同,不同版本和不同糾錯級所容納的比特數見附錄四。而補齊碼就是在我們確定好QR碼的版本和糾錯級后,判斷數據編碼的比特數在此版本和糾錯級下比特數是否相等。那么就補11101100 ?00010001進行填充,如果一次填充還不足的話,可循環再次填充。直到其與比特數相同
1.7小結
該節主要講述了二維碼的數據編碼。在進行數據編碼時,我們要準備好所選擇的QR碼版本,糾錯級,編碼模式,字符串字符個數,要編碼的數據,結束碼,湊8bits整,補齊碼。可用以下公式表示:數據編碼=編碼模式+字符長度+編碼的數據+結束碼+湊8bits整+補齊碼。
備注:文中的數據編碼在不同位置所表示的不一樣,留給讀者自己體會。
1.8實例
首先,我個人不喜換看太多文字,相信有和我一樣的。那么在此,我就數據編碼舉個例子,讓新手可以快速入手。
例:對XIAOXIAOYU520進行數據編碼。
分析:XIAOXIAOYU520這一字符串中有大寫字母和數字兩種類型,我們可選擇字母數字編碼模式和字節模式,再看看其字符串長度為13。在此我們選擇Q糾錯級進行編碼,查看附錄二的表可知,應選擇版本1,Q,字母數字模式編碼。V1字母數字模式字符串長度用9bits表示(見Table3)。
答:①模式選擇:0010字符串長度:13→000001101
②XIAOXIAOYU520→XI AOXI AO YU 52 0
→11000001100 00111011010 11000001100 00111011010
11001000101 00011100011 000000
0010 00000110111000001100
00111011010 11000001100 00111011010 11001000101 000111000110000000000
⑤湊8bits整
0010000001101110 00001100 00111011 01011000 00110000 11101101 01100100 0101000111000110 00000000 00000000
⑥V1-Q能容納13個數據字見附錄四表,即104字節。
104-12×8=8即補償碼為11101100
⑦模式選擇+字符串長度+數據的編碼+結束符+湊8bits整+補償碼
0010000001101110 00001100 00111011 01011000 00110000 11101101 01100100 0101000111000110 00000000 00000000 11101100