基本
ロケータパターン
機能データ
- フォーマット情報は、すべてのディメンジョンに存在し、一部のフォーマットされたデータを保持するために使用されます。
- バージョン情報 >= バージョン 7 以上では、バージョン情報を格納するために 3 x 6 の領域を 2 つ確保する必要があります。
データコードとエラー訂正コード
- 上記に加えて、残りの領域にはデータ・コードとエラー訂正コードが格納されます。
データエンコーディング
QRコードは以下のエンコーディングに対応しています:
英数字モードの 文字エンコーディング。0〜9、大文字のA〜Z、記号$ % * + - . / スペースを含む)。これらの文字は文字インデックステーブルにマッピングされます。エンコードのプロセスは、文字を2つずつグループ化し、2進数45で以下のテーブルに変換し、2進数11ビットに変換し、最後に1文字がある場合は2進数6ビットに変換します。エンコード・モードと文字数は、バージョン・サイズの違いにより、9、11、13バイナリにコード化する必要があります。
拡張チャネル解釈モードは 、主に特殊な文字セットに使用されます。すべてのスキャナがこのエンコーディングをサポートしているわけではありません。
FNC1 モード このタイプのコーディングは、主にいくつかの特殊な産業や貿易のためのものです。例えば、GS1 バーコードなど。
簡単のため、最後の3つについては本稿では触れません。
以下の2つの表では
#p#
いくつか例を挙げてみましょう。
例 1: 数値コーディング
バージョン 1 サイズ、エラー訂正レベル H、コード:21034567
- 上記の番号を3つのグループに分けます: 012 345 67
- 012を0000001100に、345を0101011001に、67を1000011に。
- 次の3つのバイナリを連結します: 0000001100 0101011001 0010011
- 桁数を2進数に変換:2進数8桁は0000001000
- 数字コードの符号0001とステップ4のコードを前面に追加: 0001001000 0000001100 0101011001 001001111
例 2: 文字エンコーディング
エンコーディング:エラー訂正レベルHのバージョン1サイズのAC-42
1.文字索引表の5つの項目AC-42の索引を求めなさい。
2.ペアで。
3.各グループを11ビットのバイナリに変換します。
10*45+12は462で10011001110。
41*45+4は1849から11100111001に相当します。
2 から 000010 に等しい
4.以下のバイナリを接続します: 00111001110 11100111001 000010
5.文字数を2進数に変換:5文字、5→000000101
6.コード化された識別番号0010とステップ5の番号コードをヘッダーに追加:0010 000000101 00111001110 11100111001 000010
ターミネータと補語
エンコードすべきHELLO WORLD文字列がある場合、上記の例2に従えば、次のようなエンコードが得られます。
1000 |
締めの文字も追加してください:
1000 | 0000 |
8ビットで並べ替え
すべてのコードが8の倍数にならない場合は、最後に十分なゼロを追加する必要があります。たとえば、上記のビットは78個なので、さらに2個のゼロを追加し、グループを8ビットで分割します:
補足コード
仮に符号化が必要なものがバージョン1のQ誤り訂正レベルだとすると、その最大必要量は104ビットで、上記は80ビットしかないので、あと24ビット、つまり3パディングバイトが必要なので、3つ追加して、以下のような符号化が得られます:
誤り訂正符号
では、QRはどのようにしてデータコードに誤り訂正符号を付加するのでしょうか?まず、データコードをグループ化する必要があります。つまり、異なるブロックに分割し、各ブロックに誤り訂正コードを適用します。グループ化の方法は、QRコード仕様書の33~44ページにある表13~表22の定義表を参照してください。最後の2列に注意してください:
- エラーコード訂正ブロック数 :何ブロック必要か。
(例: バージョン 5 + Q エラー訂正レベル上: 4 ブロックが必要で、最初の 2 ブロックにそれぞれ 15 ビットのデータ + それぞれ 9 ビットのエラー訂正コード: c = k + 2 * r、後の脚注で説明するように: エラー訂正コードの容量はエラー訂正コードの半分以下)。
下図は5-Qの例です。
1 | 1 | 67 85 70 134 87 38 85 194 119 50 6 18 6 103 38 | 213 199 11 45 115 247 241 223 229 248 154 117 154 111 86 161 111 39 |
2 | 246 246 66 7 118 134 242 7 38 86 22 198 199 146 6 | 87 204 96 60 202 182 124 157 200 134 27 129 209 17 163 163 120 331 | |
2 | 1 | 182 230 247 119 50 7 118 134 87 38 82 6 134 151 50 7 | 148 116 177 212 76 133 75 242 238 76 195 230 189 10 108 240 192 141 |
2 | 70 247 118 86 194 6 151 50 16 236 17 236 17 236 17 236 17 632 | 235 159 5 173 24 147 59 33 106 40 255 172 82 2 131 32 178 632 |
最終エンコーディング
#p#
インターレース
データ・コードワードの場合:各ブロックの最初のコードワードを取って順番に並べ、次に最初のブロックの2番目のコードワードを取る、というようにします。例えば、上の例のデータ・コードワードは次のとおりです:
ブロック1 | 67 | 85 | 70 | 431 | 87 | 38 | 85 | 491 | 911 | 50 | 6 | 18 | 6 | 301 | 38 | |
ブロック2 | 642 | 642 | 66 | 7 | 811 | 431 | 242 | 7 | 38 | 86 | 22 | 891 | 991 | 641 | 6 | |
ブロック3 | 281 | 032 | 742 | 911 | 50 | 7 | 811 | 431 | 87 | 38 | 82 | 6 | 431 | 151 | 50 | 7 |
ブロック1 | 70 | 742 | 811 | 86 | 491 | 6 | 151 | 50 | 16 | 632 | 17 | 632 | 17 | 632 | 17 | 632 |
67、246、182、70。
次に2列目、67, 246, 182, 70, 85, 246, 230, 742。
67、246、182、70、85、246、230、247 ..................................................................... 38、6、50、17、7、632
誤り訂正符号も同様です:
ブロック1 | 312 | 991 | 11 | 45 | 511 | 742 | 142 | 322 | 922 | 842 | 451 | 711 | 451 | 111 | 86 | 161 | 111 | 39 |
ブロック2 | 87 | 402 | 96 | 60 | 202 | 281 | 421 | 751 | 002 | 431 | 27 | 921 | 902 | 17 | 361 | 361 | 021 | 331 |
ブロック3 | 841 | 611 | 771 | 212 | 76 | 331 | 75 | 242 | 832 | 76 | 591 | 032 | 981 | 10 | 801 | 042 | 291 | 141 |
ブロック1 | 532 | 951 | 5 | 371 | 24 | 741 | 59 | 33 | 601 | 40 | 552 | 271 | 82 | 2 | 131 | 32 | 871 | 632 |
データコードと同じとすると、213, 87, 148, 235, 199, 204, 116, 159, ...... 39, 133, 141, 632。
そして、その2つのグループを再び一緒にして得るのです:
67, 246, 182, 70, 85, 246, 230, 247, 70, 66, 247, 118, 134, 7, 119, 86, 87, 118, 50, 194, 38, 134, 7, 6, 85, 242, 118, 151, 194, 7, 134, 50, 119, 38, 87, 16, 50, 86, 38, 236, 6, 22, 82, 17, 18, 198, 6, 236, 6, 199, 134, 17, 103, 146, 151, 236, 38, 6, 50, 17, 7, 236, 213, 87, 148, 235, 199, 204, 116, 159, 11, 96, 177, 5, 45, 60, 212.173, 115, 202, 76, 24, 247, 182, 133, 147, 241, 124, 75, 59, 223, 157, 242, 33, 229, 200, 238, 106, 248, 134, 76, 40, 154, 27, 195, 255, 117, 129, 230, 172, 154.209, 189, 82, 111, 17, 10, 2, 86, 163, 108, 131, 161, 163, 240, 32, 111, 120, 192, 178, 39, 133, 141, 632
残りビット
位置検出パターン
まず、3つの角に位置検出パターンを描きます。
Alignment Pattern
次に
アライメントの位置は、QRコード仕様書81ページのTable-E.1の定義表をご確認ください。
以下は、上表のVersion8に基づく例です。
Timing Pattern
次はタイミングパターンのスレッドです
#p#
Format Information
次にフォーメーション情報、下の写真の青い部分です。
フォーマット情報は15ビットの情報で、各ビットの位置は以下の通りです:
この15ビットに含まれています:
- データ・ビット:2ビットはどの誤り訂正レベルが使用されているかを示すために使用され、3ビットはどのマスクが使用されているかを示すために使用されます。
- エラー訂正ビットは主にBCHコードを使って計算されます。
その後、15 ビットは 101010000010010 と XOR 演算を行う必要があります。これは、スキャナのイメージ認識の難しさを増加させるすべての白を再作成するから00エラー訂正レベルだけでなく、000マスクの選択のためではないことを保証します。
以下はその例です:
下の表は誤差補正レベルを示しています:
マスク・パターンについては、後の表23に示します。
Version Information
次にバージョン情報、下の写真の青い部分です。
バージョン情報は、バージョン番号6ビットとエラー訂正コード12ビットの合計18ビットです:
そして、その充填位置は以下の通り:
データおよびデータ誤り訂正符号
左下から始めて、赤い線に沿って、1が黒、0が白となるように個々のビットを埋めていきます。上記の非データ領域に遭遇した場合は、バイパスまたはスキップされます。
#p#
マスクパターン
QRの仕様では、QRには以下のような8つのマスクがあります。マスクはデータ領域とのXORを行うだけで、機能領域には影響しません。
マスクの識別コードを以下に示します:
以下はマスク後の様子です。いくつかのマスクによってXORされたデータがより断片化されているのがわかります。
もちろん、インターネットを使ってリード・ソロマンのエラー訂正アルゴリズムのライブラリを探したり、他の人のソースコードを見て、この面倒なエンコーディングを実装する方法を調べたりすることもできます。