月曜日, 8月 08, 2011

QRコードを作るプログラムを作る(2)

月曜日のEテレの0655では爆笑問題田中さんのたなくじがあります。
今日いただいたくじはプチ凶みたいな感じのやつでした。あまり
気に入らなかったので、消しました。じくなた〜。

先日、QRコードの数字モードの符号化について書きました。
本日は英数字モードの符号化について続けます。
なんか、気が乗りません。あまりおもしろくないかも。

では、英数字モードです。
数字0〜9までと大文字のアルファベット(A〜Z)および
記号(スペース、$、%、*、+、-、.、/、: )が対象となる。
これらの数字には規格書の中で、先ほど紹介した順に
0〜44までの番号が割り振られている。
つまり、数字の0は0番、Aは10番、Bは11番と続いて、
スペースが36番、そして: が最後で44番である。

英数字モードでは入力テキストを二文字ずつに区切って符号化することで
短縮化している。手順は以下の通り。

例:入力データ HELLO

  1. それぞれの文字の番号を取得すると 17,  14,  21,  21,  24 になる。
  2. 二つずつのグループにする。 (17, 14)   (21, 21)  (24)
  3. 各グループごとに一つ目の数字を45倍して二つ目の数字と足す。
    ただし最後の1文字残った場合はそのまま。
    • (17, 14) → 17 x 45 + 14  =  779
    • (21, 21) → 21 x 45 + 21  =  966
    • (24)        → 24
  4. それぞれを11桁の2進数にする。ただし、最後の1文字分は6桁でよい。11桁というのは、3の手順で数値化した二桁の文字の値の最大値が44 x 45 + 44 = 2024 でこれを2進数で表すと111 1110 1000 となり11桁必要だからだ。同様に最後の一桁の場合最大値は44だからそれは6桁で足りる。
    • 779 → 011 0000 1011
    • 966 → 011 1100 0110
    • 24    → 01 1000
  5. 最後にこれらをつなげて、前にモード指示子と文字数指示子をつける。
    以下のようになる。
    モード:0010 (英数字)
    文字数:0 0000 0101 (5文字)※長さは型番により変わる
    データ:011 0000 1011    011 1100 0110     01 1000

            結果:00100000001010110000101101111000110011000

ということで、英数字モードは簡単でしたが、
やっぱり、なんかつまらない。くじのせいかな。


0 件のコメント: