QR碼設計(2)之數據編碼

轉載請注明出處


1.1選擇糾錯級

對數據進行編碼前,需要選擇數據的校正級別。QR碼使用的是Reed-Solomon糾錯。它是在編碼數據的基礎上創建糾錯碼字(字節)。根據糾錯碼字來確定QR碼識別器有沒有正確讀取數據,并且可以糾正這些錯誤。糾錯等級一共有四種,分別為L、M、Q、H。每個等級糾錯數據的能力也不一樣,見Table1所示。

Table1

1.2確定數據的最小版本

每個版本所含有的信息量不同,版本越高,承載信息量就越大。在實際設計中,我們應該根據要顯示的信息大小選擇最小的版本。

1.3添加模式選擇代碼

各種模式代碼如Table2所示

Table2

各種版本所對應的不同編碼模式字符串長度轉換二進制后位數見Table3所示。

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中,小寫英文字母是不支持的。

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,184評論 6 13
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 月照高樓小巷明,左鄰右舍好安寧。門前靜坐搖香扇,樹下熬茶填小令。 追過去,話光榮,不知不覺夜三更。天燒熱浪該消去,...
    木貞ma閱讀 303評論 3 5
  • 我在街邊開了家酒館,僅以故事換酒喝,聽著往來癡情惆悵客說他們的故事。 一個身著青色衣袍相貌平凡的男子踏進店里隨意找...
    春扶閱讀 629評論 0 0
  • 一年一度的春節,一年一度的吐槽大會,特別對春晚。 春節聯歡晚會越來越被更多的當代人不看好,以小品類節目為主要篩子,...
    VirtueYoung閱讀 213評論 1 0