今回の解説で「数字モード」の解説は今回で終わりです!(ちなみに、次回は実例をあげてみます)
独極・QRコード担当の「あじな」です。
「データ」の作り方ですが、「数字モード」の場合、「エンコードしたい数字を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桁を生み出したのです。
例えば、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つ書いた時点で、容量がいっぱいになったら、そこで終わりにします)
さて、これで「数字モード」の解説は終わりです!
「解説だけ聞いててもよーわからん!!」というお声(あるのか?)にこたえて、次回は実例で解説します!!
独極・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コードの「エンコード」方式は「数字モード」「英数字モード」「漢字モード」「8bitモード」の4種類
- どの「エンコード」方式でも、データは「モード指示子」+「文字数指示子」+「データ」+「終端パターン」+「埋め草ビット」+「埋め草ワード」となる
数字モードのデータ
「モード指示子」や「文字数指示子」なんて退屈なものより、「データ」のほうが気になりますよね。「データ」の作り方ですが、「数字モード」の場合、「エンコードしたい数字を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つ書いた時点で、容量がいっぱいになったら、そこで終わりにします)
さて、これで「数字モード」の解説は終わりです!
「解説だけ聞いててもよーわからん!!」というお声(あるのか?)にこたえて、次回は実例で解説します!!