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. どの「エンコード」方式でも、データは「モード指示子」+「文字数指示子」+「データ」+「終端パターン」+「埋め草ビット」+「埋め草ワード」となる

数字モードのデータ

「モード指示子」や「文字数指示子」なんて退屈なものより、「データ」のほうが気になりますよね。

「データ」の作り方ですが、「数字モード」の場合、「エンコードしたい数字を3桁ずつに区切り、各数字を10桁の2進数に変換」します。
もし、3桁ずつに区切ったときに、「最後の数字が1つ余った場合は4桁の2進数」へ、「最後の数字が2つ余った場合は7桁の2進数」に「エンコード」します。

「はぁ!?」って感じですよね。。

文章で書くとわかりにくい(私の文章力の問題なだけ・・)ですが、実例を見ると簡単だと思います。
たとえば、「09012345678」という数字をエンコードしてみましょう。

まず、左から3桁ずつに区切ります。全部で11文字なので、最後は数字が2桁になってしまいますね。

「09012345678」=「090」+「123」+「456」+「78」

次に、各3桁ずつの数字を10桁の2進数に変換します。(最後の2桁の数字は7桁の2進数に変換します)


「090」=「0001011010」(10桁)
「123」=「0001111011」(10桁)
「456」=「0111001000」(10桁)
「78」=「1001110」(7桁)


あとは、出来上がった2進数をつなげれば終わりです。

ということは、最終的には「09012345678」が「0001011010000111101101110010001001110」という37桁の2進数になります!!

なぜ、3桁ずつに区切る?

例えば、2桁ずつではだめなのでしょうか?それとも、1桁ずつでは?

実は、「もったいない」の精神が3桁を生み出したのです

例えば、1桁の数字を二進数に変換することを考えてください。

1桁の数字は0~9なので、全部で10種類。ということは、2進数であらわすためには、\(2^4=16\)なので、4桁が必要です。

でも、4桁つかうと16種類の文字があらわせるのに、数字は10種類しかないので6種類分(約40%)が「ムダ」になります。

では、3桁ずつ区切って二進数に変換するとどうなるでしょうか?
3桁の数字は0~999なので、全部で1000種類。ということは、2進数であらわすためには、\(2^{10}=1024\)なので、10桁が必要です。

そしてこの場合、10桁つかうと1024種類の文字があらわせるのに、数字は1000種類しかないので24種類分(約2%)しか「ムダ」になりません。


こう見ると、3桁まとめて変換した場合のムダは「2%」ととっても少ないですよね。
QRコードはなるべくムダを出さないように「もったいない」の精神で作られているのです。

終端パターン+埋め草ビット+埋め草ワード

面倒くさいから・・・いや、わかりやすいように簡潔に解説します。


「終端パターン」は「ここでデータは終わりですよ。という合図」のパターンで「0000」です。

「埋め草ビット」は「データ領域」全体の1,0の数が「8の倍数」になるように「0」を入れたものです。
「QRコード」は「8個」の数字(1,0)を1つの固まりとして処理します。そのため、全体が「8の倍数」になっていないと、小さな固まりができてしまうのです。


最後に、「埋め草ワード」についての解説です。


QRコードでは、バージョンと誤り訂正レベルによって、データ領域の「容量(何個の1,0を記載できるか)」が決まります。

でも、もしQRコードで表現したい文字が少ない場合、データ領域の「容量」に達しない場合があります。
その際、埋め草ビットの後に「11101100」と「00010001」を交互に記載して容量いっぱいまで詰めていきます。


ちなみに、「終端パターン」「埋め草ビット」「埋め草ワード」はもしデータの容量がいっぱいになったら、できるところまで書きます。
(例えば、「終端パターン」の「0」を3つ書いた時点で、容量がいっぱいになったら、そこで終わりにします)

さて、これで「数字モード」の解説は終わりです!
「解説だけ聞いててもよーわからん!!」というお声(あるのか?)にこたえて、次回は実例で解説します!!