独極・QRコード担当の「あじな」です。
さぁ、いよいよQRコードの心臓部分を解説していきます。気合いはいってますよ。
QRコードは4種類の「エンコード」のルールが決められています。
4種類の符号化方式があるということは、イメージでいえば「こんにちは」という文字を白黒の四角に変換する方式が4種類もあるということです。
はぁ!?何面倒くさいことしてくれとんじゃ!!同じ文字を表すのに4種類も別の方法を覚える必要ある!?
という文句が出るのもごもっともです。
例えば、符号化すべき文字が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個の白黒の四角を使うことで実現できることがわかります。
先ほどの数字の例だと、4個の白黒さえあれば1文字を表すことができました。
では、56文字のひらがな+数字を4個の白黒で表すことができるでしょうか?
当然、無理ですよね。56文字表すためには、6個の白黒(\(2^6=64\)種類)が必要です。
(この場合、10パターンほどどの文字にも対応しない(使わない)パターンが発生します)
できれば、「4つの白黒の四角」で表せたほうが場所もとらなくていいですよね。
でも、もしひらがなもQRコードで表す必要がある場合は「6個の白黒の四角」を使わないといけません。
ここで書いていることでわかるように、表したい文字の種類数によって1文字に必要な白黒の個数が違います。
もちろん、全種類の文字を表せるようにしたほうが、シンプルでよいのですが、そうすると1文字に必要な白黒の四角の個数がとても多くなってしまいます。
そのため、QRコードでは以下の4つのパターンで1文字に使う白黒の四角数を変えています。つまり、「符号化」の方式を変えています。
QRコードでは、このようにモードをわけることで、各モードで使える文字数を制限しています。
例えば、数字しか使わない(携帯番号のみをQRコードで表す)ときは、どのモードをつかっても表現することができます。
でも、「数字モード」を使えば、他のモードと比べて対象となる文字の文字数が少ないので1文字を表すために必要な白と黒の四角の数も少ないはずです。
だから、数字しか使わない場合は「数字モード」を使ったほうがコンパクトに情報を表すことができます。
使う文字によって最も効率のよい符号化方法を選びましょう。
さて、次回からは各モードの符号化の方法を具体的に見ていきます。
さぁ、いよいよQRコードの心臓部分を解説していきます。気合いはいってますよ。
これまでの復習 [表示する]
- QRコードは株式会社デンソーが作ったもので、スマホや携帯で読み取れる
- QRコードは「小さな白と黒の四角でできている」「多少汚れても大丈夫」という特徴がある
- 白黒の四角を使うのは、コンピュータにわかりやすくさせるため
- QRコードは「機能パターン」と「符号化領域」で出来上がっている
- 「機能パターン」は、「クワイエットゾーン」「位置検出パターン」「位置検出パターンの分離パターン」「タイミングパターン」「位置合わせパターン」の5種類
- 「符号化領域」は「形式情報」「型番情報」「データ領域」の3種類
- 「形式情報」は「エラー訂正レベル」と「マスクパターン参照子」で決まり、「\(4 \times 8=32\)」種類のパターンがある
- 「型番情報」は「QRコードのバージョンによって決まり、40種類ある
- 「データ領域」は「データ」と「エラー訂正情報」で出来上がる
- QRコードはバージョンが1~40まである。一辺の大きさは、「QRコードのバージョン(1~40)\( \times \)4\( + \)17」
- 「エラー訂正レベル」は「L(7%の汚れまで)」「M(15%の汚れまで)」「Q(25%の汚れまで)」「H(30%の汚れまで)」の4種類ある
- 「1bit」とは白・黒、1・0のような2種類の情報を表すことができる能力のことで、文字を増やすと「2bit(4種類)」「3bit(8種類)」と表現できる種類が増える
- 日常の言葉を「エンコード」して「コード(符号)」に置き換え、「コード(符号)」を「デコード」して日常の言葉に戻す
符号化方式を分ける
まず、どーーんと結論から。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文字を表すために必要な白と黒の四角の数も少ないはずです。
だから、数字しか使わない場合は「数字モード」を使ったほうがコンパクトに情報を表すことができます。
使う文字によって最も効率のよい符号化方法を選びましょう。
さて、次回からは各モードの符号化の方法を具体的に見ていきます。