QRコードをつくってみる2

前のページへ  次のページへ





2、作成手順

 今回はCGIをつくるという目的なので相性の悪そうな漢字モードは扱いません。また連結・混在モードなどの記述は省きます。
 (すなわち簡単なデータのエンコードのみを扱います。)

2.1 データ容量

 1つのQRコードが格納できるデータ数はデータの種類(数字・英数字etc)、 バージョン、誤り訂正レベルによって決定されます。
 例えばバージョン1の誤り訂正レベルQの場合は数字だけならば27文字 英数字だけならば16文字、8bitバイトならば11文字が可能です。
表1参照ください。
 逆に同一データ数で誤り訂正レベルを高くすればシンボルのバージョンが上がり シンボルの大きさが大きくなります。

上記を踏まえてシンボルの誤り訂正レベルを決め、また必要ならばバージョンも 決めておきます。

2.2 データコード語の作成

 QRコードでは8bitを1コード語として扱い、誤り訂正語計算やデータの配置 など、すべてこの単位で行います。
 ここではデータを8bit単位のコード語に変換する手順を記します。

サンプルとして ABCDE123 というデータをバージョン1誤り訂正レベルH(以下1-H型)で 表記することを考えます。

2.2.1 モード指示子

まず最初にモードを4bitで表示します。
数字モードならば 0001
英数字モードならば 0010
8bitバイトならば 0100
漢字ならば 1000

サンプルは英数字なので英数字モードを選択します。

0010

2.2.2 文字数指示子

格納する文字数を下記のbit数で表記します。下記はバージョン1~9の場合です
数字モードならば 10bit
英数字モードならば 9bit
8bitバイトならば 8bit
漢字ならば 8bit

サンプルは8文字あり英数字モードなのでこれを9bitであらわします

0010 000001000

となります。

2.2.3 データの2進化

 次に実データの2進化です。
 数字モードではデータを3桁づつ区切ってそのまま整数として読んだものをデータとします。

 すなわち"123456"とあれば"123"と"456"に分割し1つめのデータを"123"、2つめを"456"とします。

 そしてそれぞれを10bitの2進数であらわします。
 もし3桁に満たない場合はそれぞれ4bit,7bitの2進数であらわします。

 例えば"9876"とあれば"987"と"6"に分けて10bitで987、4bitで6を表現します。
 よってこの場合は 1111011011 0110 となります。

 英数字モードではまず表2の通りに各文字を数字化します。
 データを2桁づつ区切って1桁めの文字の上記の表の値を45倍したものと2桁目の文字の上記の表の値を足します。
 算出された値を11bitの2進数で表記します。なお2桁に満たない場合は残った場合は対応する値を6bitで表記します。

サンプルでやってみると

"AB""CD""E1""23"
45*10+1145*12+1345*14+145*2+3
46155363193
0010000001000 00111001101 01000101001 01001110111 00001011101


 なお8bitデータの場合はその数字をそのまま8bit単位で割り振ります。

2.2.4 終端パターン

最後に終端パターンとして0000を付加します。
ただしデータビット列がシンボル容量を満たしている場合は必要ありません。

0010 000001000 00111001101 01000101001 01001110111 00001011101 0000

2.2.5 コード語変換

QRcode model2ではデータはすべて8bitの単位で処理するので上記のデータを
8bit毎に区切ります。

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000

最後のビット列が8bit未満の場合は0で埋めます。

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000000

得られたコード数がシンボルのデータコード数(表1) に満たない場合は11101100 および 00010001を
交互に付加してシンボル容量にあわせます。

今1-H型はデータ容量が9コードなので

00100000 01000001 11001101 01000101 00101001 11011100 00101110 10000000 11101100

これを10進表記にすると

32 65 205 69 41 220 46 128 236

となります


次ページ:誤り訂正コード語の作成

前のページ  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]  次のページ