QRコードの概要
符号化(エンコード)
エラー訂正の概要
エラー訂正に必要な「行列」の解説
「行列」を使ってエラー訂正をしよう
リード・ソロモン符号とエラー訂正の方法
多項式の割り算
リード・ソロモン符号の作り方
ガロア理論と体
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. 日常の言葉を「エンコード」して「コード(符号)」に置き換え、「コード(符号)」を「デコード」して日常の言葉に戻す

符号化方式を分ける

まず、どーーんと結論から。


QRコードは4種類の「エンコード」のルールが決められています。


4種類の符号化方式があるということは、イメージでいえば「こんにちは」という文字を白黒の四角に変換する方式が4種類もあるということです。

はぁ!?何面倒くさいことしてくれとんじゃ!!同じ文字を表すのに4種類も別の方法を覚える必要ある!?

という文句が出るのもごもっともです。

0~9までの文字をQRコードで表す場合

まぁ、ちょっと気持ちを落ち着かせて、読んでください。


例えば、符号化すべき文字が10種類あるとします。(符号化する対象の文字が0,1,2,3,4,5,6,7,8,9しかない場合をイメージしてください)

この場合、「白」「黒」の四角で表現しようとすると、1文字を表すのに何個の白黒が必要でしょうか?


もし、白黒の四角が1つであれば、2種類(例えば0と1)しか表すことができないので、2や3は表すことができません。
もし、白黒の四角が2つあれば、「\(2^2=4\)」種類を表すことができます。それでもまだ10文字全てを表すことができません。

10文字を表すには、白黒の四角が4個(\(2^4=16\))必要です。
(但し、6パターンほどどの文字にも対応しない(使わない)パターンが発生します)
もし、数字だけしかQRコードで表現しない場合、1文字あたり4個の白黒の四角を使うことで実現できることがわかります。

ひらがなと0~9をQRコードで表す場合

では、つぎにひらがな(46文字)と0~9の数字(10文字)をQRコードで表すことを考えてみましょう。

先ほどの数字の例だと、4個の白黒さえあれば1文字を表すことができました。

では、56文字のひらがな+数字を4個の白黒で表すことができるでしょうか?

当然、無理ですよね。56文字表すためには、6個の白黒(\(2^6=64\)種類)が必要です。
(この場合、10パターンほどどの文字にも対応しない(使わない)パターンが発生します)

必要最小限の美学

では、「数字の0~9」しか使わない場合、先ほどの「4つの白黒の四角」を使って表す場合と、「6個の白黒の四角」を使って表す場合のどちらが好ましいでしょうか?

できれば、「4つの白黒の四角」で表せたほうが場所もとらなくていいですよね。

でも、もしひらがなもQRコードで表す必要がある場合は「6個の白黒の四角」を使わないといけません。


ここで書いていることでわかるように、表したい文字の種類数によって1文字に必要な白黒の個数が違います。

もちろん、全種類の文字を表せるようにしたほうが、シンプルでよいのですが、そうすると1文字に必要な白黒の四角の個数がとても多くなってしまいます。

そのため、QRコードでは以下の4つのパターンで1文字に使う白黒の四角数を変えています。つまり、「符号化」の方式を変えています

符号化方式対象となる文字文字数
数字モード0~9の数字10文字
英数字モード「0~9の数字」と「A~Zのアルファベット大文字」と「9種類の記号」45文字
8bitモード漢字を含めたすべての文字2953文字
漢字モード漢字・ひらがな1817文字

QRコードでは、このようにモードをわけることで、各モードで使える文字数を制限しています。

例えば、数字しか使わない(携帯番号のみをQRコードで表す)ときは、どのモードをつかっても表現することができます。

でも、「数字モード」を使えば、他のモードと比べて対象となる文字の文字数が少ないので1文字を表すために必要な白と黒の四角の数も少ないはずです。
だから、数字しか使わない場合は「数字モード」を使ったほうがコンパクトに情報を表すことができます。

使う文字によって最も効率のよい符号化方法を選びましょう。
さて、次回からは各モードの符号化の方法を具体的に見ていきます。