天天看點

二維碼(QR code)原了解析二維碼(QR code)原了解析

二維碼(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 個字元的字元集進行編碼

  • 10 個數字
ASCII值 3 0 H E X → 3 9 H E X 30_{HEX}\to39_{HEX} 30HEX​→39HEX​
  • 26 個字母
ASCII值 4 1 H E X → 5 A H E X 41_{HEX}\to 5A_{HEX} 41HEX​→5AHEX​
  • 9 個符号
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​

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 0111
    ECI 指定符的作用的規則見 AIM ECI 規範。
  • 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” 來填充,不代表任何資料含義。

在把所得結果的資料碼字序列按規則進行處理,加入糾錯碼字。

4 糾錯

繼續閱讀