まだまだ見捨てず読んでいただいてありがとうございます。
独極・QRコード担当の「あじな」です。
「データ領域編」(←勝手に名前を付けました)最後のテーマに入ります。一人でちょっと感動しております。
「Shift-JIS」と呼ばれる文字コードのうち、2バイト文字(いわゆる全角の文字)を全部表すことができます。
「8bitモード」と違うのは、「1,2,3,A,c,f」といった「半角文字」が表せないのです。(「1、2、3、A、c、f」の全角文字はOKです)
もちろん、データ領域の構造はそのほかのモードとまったく同じです。ねちっこく、もう一度構造を書いておきますね。
「モード指示子」+「文字数指示子」+「データ」+「終端パターン」+「埋め草ビット」+「埋め草ワード」
「モード指示子」は、「漢字モード」の場合は「1000」です。
次に、「文字数指示子」ですが「漢字モード」の場合の「文字数指示子」の桁数は次の表のとおりです。
もちろん、「終端パターン(「0000」)」、「埋め草ビット(データ領域の桁数が8の倍数になるように「0」を入れる)」、「埋め草ワード(QRコードのバージョン・エラー訂正レベルで決まる容量を満たすように「11101100」と「00010001」を交互に入れる)」も他のモードと全く同じです。
まず、エンコードしたい文字の「Shift-JISコード」を16進数で調べます。(これは「8bitモード」と同じですね)
もし、対象の16進数が「8140~9FFC」の場合、対象の16進数から「8140」を引いて、上の2桁を「C0」倍した後に、下の2桁と足し算します。
もし、対象の16進数が「E040~EBBF」の場合、対象の16進数から「C140」を引いて、上の2桁を「C0」倍した後に、下の2桁と足し算します。
計算した16進数の数字を「13桁」の2進数で表して終わりです。
はぁぁぁぁぁ!?なにいっとんじゃ!?
あぁーー。具体例を書くからどうか離脱しないでください・・・。
例えば、「愛」という文字を「漢字モード」でエンコードしてみましょう。
(「対応表」は「こちら(http://seiai.ed.jp/sys/text/java/shiftjis_table.html)」のページに掲載されています)
「愛」の「Shift-JIS」コードは「88A4」なので、手順に従って、ここから「8140」を引きます。答えは「0764」ですね。
※16進数の四則演算は手計算でするには少ししんどいですよね。そんなときは、このページ(http://www.ccn2.aitai.ne.jp/~keikun/16.html)にあるような「16進数計算機」を使うと簡単です。
次に、上の2桁「07」を「C0」倍します。「\(07 \times C0 =540\)」です。
最後に、「540」と下2桁「64」を足します。「\(540+64=5A4\)」です。
最後に「5A4」を13桁の2進数にします。「\(5A4=0010110100100\)」。これでエンコード完了です。
さて、「漢字モード」の「エンコード」のやり方はわかっていただいたかもしれませんが、なんで「8140」を引いたり「C0」倍したりするのでしょうか?なぜそんなことをするのか雰囲気だけ味わっていただきましょう。
「漢字モード」や「8bitモード」で使う「Shift-JIS」ですが、今後新しい文字が出たときのことなどを考えて、ある程度「余裕」をもって番号がふられています。(1~10番までは使って、次は20~30番を使う(11番~19番までは文字に割り当てない)といった感じです)
「QRコード」では少しでも少ない桁数であらわすために、その欠番部分を上手に「詰める」ように計算します。
この考え方は、基本的には「英数字モード」で解説したものと同じです。
そのために、「8140」を引いたり「C0」倍するのです。
次回は例によって具体例を見ていきましょう。
次回で「データ領域編」は最終回です!!
独極・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種類
- どの「エンコード」方式でも、データは「モード指示子」+「文字数指示子」+「データ」+「終端パターン」+「埋め草ビット」+「埋め草ワード」となる
漢字モード
「漢字モード」と聞けば、「漢字しか表せないの!?」って思いますが、ひらがなもカタカナもOKです。「Shift-JIS」と呼ばれる文字コードのうち、2バイト文字(いわゆる全角の文字)を全部表すことができます。
「8bitモード」と違うのは、「1,2,3,A,c,f」といった「半角文字」が表せないのです。(「1、2、3、A、c、f」の全角文字はOKです)
もちろん、データ領域の構造はそのほかのモードとまったく同じです。ねちっこく、もう一度構造を書いておきますね。
「モード指示子」+「文字数指示子」+「データ」+「終端パターン」+「埋め草ビット」+「埋め草ワード」
「モード指示子」は、「漢字モード」の場合は「1000」です。
次に、「文字数指示子」ですが「漢字モード」の場合の「文字数指示子」の桁数は次の表のとおりです。
バージョン | 文字数指示子の桁数 |
---|---|
1~9 | 8 |
10~26 | 10 |
27~40 | 12 |
もちろん、「終端パターン(「0000」)」、「埋め草ビット(データ領域の桁数が8の倍数になるように「0」を入れる)」、「埋め草ワード(QRコードのバージョン・エラー訂正レベルで決まる容量を満たすように「11101100」と「00010001」を交互に入れる)」も他のモードと全く同じです。
「漢字モード」のデータの作り方
いよいよ「漢字モード」の「データ」部分の解説です。「データ」部分は次のようにして計算します。まず、エンコードしたい文字の「Shift-JISコード」を16進数で調べます。(これは「8bitモード」と同じですね)
もし、対象の16進数が「8140~9FFC」の場合、対象の16進数から「8140」を引いて、上の2桁を「C0」倍した後に、下の2桁と足し算します。
もし、対象の16進数が「E040~EBBF」の場合、対象の16進数から「C140」を引いて、上の2桁を「C0」倍した後に、下の2桁と足し算します。
計算した16進数の数字を「13桁」の2進数で表して終わりです。
はぁぁぁぁぁ!?なにいっとんじゃ!?
あぁーー。具体例を書くからどうか離脱しないでください・・・。
例えば、「愛」という文字を「漢字モード」でエンコードしてみましょう。
(「対応表」は「こちら(http://seiai.ed.jp/sys/text/java/shiftjis_table.html)」のページに掲載されています)
「愛」の「Shift-JIS」コードは「88A4」なので、手順に従って、ここから「8140」を引きます。答えは「0764」ですね。
※16進数の四則演算は手計算でするには少ししんどいですよね。そんなときは、このページ(http://www.ccn2.aitai.ne.jp/~keikun/16.html)にあるような「16進数計算機」を使うと簡単です。
次に、上の2桁「07」を「C0」倍します。「\(07 \times C0 =540\)」です。
最後に、「540」と下2桁「64」を足します。「\(540+64=5A4\)」です。
最後に「5A4」を13桁の2進数にします。「\(5A4=0010110100100\)」。これでエンコード完了です。
さて、「漢字モード」の「エンコード」のやり方はわかっていただいたかもしれませんが、なんで「8140」を引いたり「C0」倍したりするのでしょうか?なぜそんなことをするのか雰囲気だけ味わっていただきましょう。
「漢字モード」や「8bitモード」で使う「Shift-JIS」ですが、今後新しい文字が出たときのことなどを考えて、ある程度「余裕」をもって番号がふられています。(1~10番までは使って、次は20~30番を使う(11番~19番までは文字に割り当てない)といった感じです)
「QRコード」では少しでも少ない桁数であらわすために、その欠番部分を上手に「詰める」ように計算します。
この考え方は、基本的には「英数字モード」で解説したものと同じです。
そのために、「8140」を引いたり「C0」倍するのです。
次回は例によって具体例を見ていきましょう。
次回で「データ領域編」は最終回です!!