QRコードの概要
符号化(エンコード)
エラー訂正の概要
エラー訂正に必要な「行列」の解説
「行列」を使ってエラー訂正をしよう
リード・ソロモン符号とエラー訂正の方法
多項式の割り算
リード・ソロモン符号の作り方
ガロア理論と体
QRコードを作ろう
QRコードメーカー
独極・QRコード担当の「あじな」です。
きました、きました!!「データ領域編」の最終回です!!

これまでの復習 [表示する]

  1. QRコードは株式会社デンソーが作ったもので、スマホや携帯で読み取れる
  2. QRコードは「小さな白と黒の四角でできている」「多少汚れても大丈夫」という特徴がある
  3. 白黒の四角を使うのは、コンピュータにわかりやすくさせるため
  4. QRコードは「機能パターン」と「符号化領域」で出来上がっている
  5. 「機能パターン」は、「クワイエットゾーン」「位置検出パターン」「位置検出パターンの分離パターン」「タイミングパターン」「位置合わせパターン」の5種類
  6. 「符号化領域」は「形式情報」「型番情報」「データ領域」の3種類
  7. 「形式情報」は「エラー訂正レベル」と「マスクパターン参照子」で決まり、「\(4 \times 8=32\)」種類のパターンがある
  8. 「型番情報」は「QRコードのバージョンによって決まり、40種類ある
  9. 「データ領域」は「データ」と「エラー訂正情報」で出来上がる
  10. QRコードはバージョンが1~40まである。一辺の大きさは、「QRコードのバージョン(1~40)\( \times \)4\( + \)17」
  11. 「エラー訂正レベル」は「L(7%の汚れまで)」「M(15%の汚れまで)」「Q(25%の汚れまで)」「H(30%の汚れまで)」の4種類ある
  12. 「1bit」とは「白・黒」、「1・0」のような2種類の情報を表すことができる能力のことで、文字を増やすと「2bit(4種類)」「3bit(8種類)」と表現できる種類が増える
  13. 日常の言葉を「エンコード」して「コード(符号)」に置き換え、「コード(符号)」を「デコード」して日常の言葉に戻す
  14. QRコードの「エンコード」方式は「数字モード」「英数字モード」「漢字モード」「8bitモード」の4種類
  15. どの「エンコード」方式でも、データは「モード指示子」+「文字数指示子」+「データ」+「終端パターン」+「埋め草ビット」+「埋め草ワード」となる

「愛してる」のエンコード

もう、だいぶ慣れてきたと思いますので、いきなり中身の説明にはいりましょう。

モード指示子は、漢字モードなので「1000」(4桁)ですね。


次に、文字数指示子は、「QRコード」の「バージョン」が「1」なので「8桁」です。そして、文字数が4個なので「00000100」(8桁)です。



次に「データ」です。
前回、解説したように「データ」部分は次のようにエンコードします。

まず、エンコードしたい文字の「Shift-JISコード」を16進数で調べます。(これは「8bitモード」と同じですね)
(「対応表」は「こちら(http://seiai.ed.jp/sys/text/java/shiftjis_table.html)」のページに掲載されています)

もし、対象の16進数が「8140~9FFC」の場合、対象の16進数から「8140」を引いて、上の2桁を「C0」倍した後に、下の2桁と足し算します。
もし、対象の16進数が「E040~EBBF」の場合、対象の16進数から「C140」を引いて、上の2桁を「C0」倍した後に、下の2桁と足し算します。
計算した16進数の数字を「13桁」の2進数で表して終わりです。


この手順で、「愛してる」をエンコードすると次のようになります。
「愛」=「88A4」-「8140」=「0764」=「07」×「C0」+「64」=「5A4」=「0010110100100」(13桁)
「し」=「82B5」-「8140」=「0175」=「01」×「C0」+「75」=「135」=「0000100110101」(13桁)
「て」=「82C4」-「8140」=「0184」=「01」×「C0」+「84」=「144」=「0000101000100」(13桁)
「る」=「82E9」-「8140」=「01A9」=「01」×「C0」+「A9」=「169」=「0000101101001」(13桁)


ふぅ。。16進数の計算、面倒くさいですね。。。
そうすると、「愛してる」=「0010110100100000010011010100001010001000000101101001」(52桁)となります。


そして、終端パターンは「0000」(4桁)ですね。


ここまでの1,0の数字を全部数えると、68桁になります。

そのため、8の倍数にするために埋め草ビット「0」を4つ追加します(72桁になり、\(8 \times 9=72\)と8の倍数になります)

ここまでで、桁数は72桁になり、語数は9語(\(72 \div 8=10\))になりました。


最後に、「QRコードのバージョン1」・「誤り訂正レベルQ」の容量は13語ですので、4語足りません。

そのため、埋め草ワードを4語ほど追加します。
つまり、埋め草ワードは「11101100000100011110110000010001」(32桁)です。
これでめでたく104桁(=13語)になりました!


これまでの内容を総合すると、「QRコードのバージョン1」、「エラー訂正レベルQ」の場合、「愛してる」をエンコードするとデータ領域は次の104桁の1,0になります!
「1000000001000010110100100000010011010100001010001000000101101001000011101100000100011110110000010001」


これですべてのモードの解説が終わりました!
やったーー!!残すは、QRコードの最大の難関「エラー訂正」です。

これが大変なんだなぁ、また。。。
まぁ、気長に連載していきますので、どうかご愛読のほどお願いいたします。