二維碼(QR code)原了解析
基于 《GB/T 18284-2000 快速響應矩陣碼》
文章目錄
- 二維碼(QR code)原了解析
-
- 1 模式
-
- 1.1 ECI 模式
- 1.2 數字模式
- 1.3 字母數字模式
- 1.4 8位位元組模式
- 1.5 中國漢字模式
- 1.6 混合模式
- 1.7 結構連結模式
- 1.8 FNC1模式
- 2 位流編碼
-
- 2.1 ECI表頭(可選)
- 2.2 模式訓示符
- 2.3 字元計數訓示符
- 2.4 終止符
- 3 碼字轉換
- 4 糾錯
1 模式
1.1 ECI 模式
擴充解釋協定允許輸出的資料流有與預設的字元集不同的解釋。
QR碼支援4大類解釋:QR碼預設解釋是 ECI 000020,表示 ASCII 字元集
- 國際字元集
- 用于諸如加密或壓縮等一般目的的解釋
- 閉環系統中使用者自定義的解釋
- 無緩沖模式中用于結構連接配接的控制資訊
1.2 數字模式
數字模式對十進制數字 0~9(ASCII值 3 0 H E X → 3 9 H E X 30_{HEX} \to 39_{HEX} 30HEX→39HEX)編碼,通常密度為每 10 位表示 3 個字元。
1.3 字母數字模式
對 45 個字元的字元集進行編碼
ASCII值 3 0 H E X → 3 9 H E X 30_{HEX}\to39_{HEX} 30HEX→39HEX
- 10 個數字
ASCII值 4 1 H E X → 5 A H E X 41_{HEX}\to 5A_{HEX} 41HEX→5AHEX
- 26 個字母
ASCII 值 2 0 H E X , 2 4 H E X , 2 5 H E X , 2 A H E X , 2 B H E X , 2 D H E X , 2 E H E X , 2 F H E X , 3 A H E X 20_{HEX}, 24_{HEX}, 25_{HEX}, 2A_{HEX}, 2B_{HEX}, 2D_{HEX}, 2E_{HEX}, 2F_{HEX}, 3A_{HEX} 20HEX,24HEX,25HEX,2AHEX,2BHEX,2DHEX,2EHEX,2FHEX,3AHEX
- 9 個符号
1.4 8位位元組模式
表示 ASCII 字元集,字元值 0 0 H E X → F F H E X 00_{HEX}\to FF_{HEX} 00HEX→FFHEX ,編碼密度為每字元 8 位。
1.5 中國漢字模式
表示 GB2312 規定的雙位元組表示的中國漢字和非漢字字元,其字元值為 GB 2312 規定字元對應的内碼值,見 GB 18030。每個雙位元組字元由 13 位二進制表示。
1.6 混合模式
以上多種模式所表示的混合資料序列,最高效表示方法見 xx
1.7 結構連結模式
把一個資料檔案分開表示為多個 QR 碼符号的序列,要求所有符号可以識讀并且資料可以按正确的順序重建立立。
1.8 FNC1模式
用于表示按 UCC/EAN 應用辨別标準或國标 AIM 協會已經同意的具體行業标準格式化資料。
2 位流編碼
ECI 标頭 + 模式訓示符 + (中國漢字子集訓示符) + 字元計數訓示符 + 資料位流
注:在中國漢字模式下,需要加入中國漢字子集訓示符,其格式為4位,訓示所用的漢字子集。目前隻選用了 0001
2.1 ECI表頭(可選)
ECI模式訓示符 + ECI訓示符
如果最初的 ECI 不是預設的 ECI,其前面要有 ECI 标頭,後面為一個或多個不同模式的段。
- ECI 模式訓示符(4位) ECI 指定符的作用的規則見 AIM ECI 規範。
名稱 訓示符 ECI 0111 - ECI 指定符(8, 16, 24位)
ECI任務号(字元集) 碼字數 碼字值 000000 ~ 000127 1 0xxxxxxx 000000 ~ 016383 2 10xxxxxx xxxxxxxx 000000 ~ 999999 3 110xxxxx xxxxxxxx xxxxxxxx 碼字值中,第一個 “0” 前的 “1” 的個數即對應碼字數,第一個 “0” 後面的各位,是 ECI 任務号的二進制表示。
從表中可以看出,三種任務号分類有重疊部分,也即,低 ECI 任務号可以用多種編碼方式,但通常最短方式為首選。
任務号即代表字元集。舉兩個例說明
-
預設為 ASCII 資料集,即 ECI 000020
任務号: 000020 ,轉換為二進制即為 10100
碼字數:可以選擇1或2或3,首選為 1。結合任務号的二進制,即得 0xx10100
碼字值:其餘位置 “x” 用 0 填充,即 00010100
-
希臘字母字元集 ISO 8859-7,即 ECI 000009
任務号:1001
碼字數:0xxx1001
碼字值:00001001
-
如果以預設的 ECI 開始,不需考慮。
2.2 模式訓示符
模式 | 訓示符數字 |
---|---|
數字 | 0001 |
字母數字 | 0010 |
8 位位元組 | 0100 |
中文漢字 | 1101 |
結構連結 | 0011 |
FNC1 | 0101(第一位置) |
FNC1 | 1001(第二位置) |
2.3 字元計數訓示符
字元計數訓示符的位數如下表所示,其值由位元組的數量決定(在中國漢字模式中為雙位元組)
版本 | 數字模式 | 字母數字模式 | 8位位元組模式 | 中國漢字模式 |
---|---|---|---|---|
v1~v9 | 10 | 9 | 8 | 8 |
v10~v26 | 12 | 11 | 16 | 10 |
v27~v40 | 14 | 13 | 16 | 12 |
2.4 終止符
名稱 | 訓示符 |
---|---|
終止符 | 0000 |
整個符号的結束由4位終止符表示,當符号資料尾流後所餘的容量不足4位時,終止符将被截斷。
3 碼字轉換
所得的資料位流将被分為一個個碼字,所有碼字的長度都是 8 位,如果位流長度最後一個碼字不足 8 位,則用二進制為 0 的填充位填充至 8 位。
然後按照表定義的版本和糾錯等級交替填充碼字 11101100 和 00010001,将資料位流擴充,以填滿符号的資料容量。為了正好填滿符号容量,有些版本也許不能正好被8位的碼字填充,此時需要在資訊的最後添加 3、4或7個剩餘位,用 “0” 來填充,不代表任何資料含義。
在把所得結果的資料碼字序列按規則進行處理,加入糾錯碼字。