[技術資料室] [フォーマット辞典][ネットワーク編]
[ハード部屋]
[A5502K]
QRコードは、JIS X 0510になっています。これを元にして、いろいろしてみたいと思います。QRコードはデンソーが開発した2次元コードです。ほかいもいろいろ2次元コードがあります。オリンパスの開発したSTコードなんていうのも比較的新しいですね。QRの次だからSTなのでしょうか。どちらもauのA5502Kで使えるので、いいかも。STコードも仕様は公開予定とか。
ほかのサイトでは、一般向けの解説がほとんど・・・か?
これはモデル2の説明です。モデル1は旧式のようなので省略。マイクロQRもA5502Kで使えないので省略。
基本的に、格納できるのは数値ではなく文字です。
座標は、左上を(0,0) として説明しますか。
1型 |
2型 |
6型 |
7型 |
14型 |
□ 明のモジュール
■ 暗のモジュール
■ データ及び誤り訂正コード語
■ 形式情報及びその誤り訂正符号(マスクの種類など)
■ 型情報及びその誤り訂正符号(大きさの情報)
1ドットに相当するものは、セルとかモジュールとかいいます。
大きさは1型から40型まであります。1型が21×21モジュール、4ずつ大きくなります。最大サイズは40型で177×177モジュールです。余白(クワイエットゾーン)が周囲に4モジュール分必要です。
3隅にあるのは、位置検出パターンです。小さい方のは、位置合わせパターンです。黒と白は、このままで、グレー(と赤)の部分に各種データを書きます。
位置検出パターンは、黒白黒黒黒白黒の縦横7x7セルの位置検出要素パータンを3つまとめたときの名称です。そのまわりには余白(位置検出パターンの余白パターン)が1セル分あります。
位置合わせパターンは、大きいパターンの位置をあわせるためのもので、位置検出要素パターンを小さくしたようなものです。黒白黒白黒と、中の黒が1セルになって5x5セルになっています。まわりに白はありません。
位置検出パターンをつないでいる、上と左から各7モジュール目にあるのはタイミングパターンです。
ここまでの基本的なのをあわせて機能パターンといいます。
データはデータ及び誤り訂正コード語の部分に書かれます。
形式情報、型情報、データ及び誤り訂正コード語の部分で、データの部分とあわせて符号化領域といいます。
データ及び誤り訂正コード語の部分は、データを書いた後、パターンをかぶせます。
誤り訂正は、リードソロモン誤り訂正を使った4段階の精度があります。
L 7% M 15% Q 25% H 30%
Lの方が訂正できる精度が落ちますが、多くのデータを入れることができます。
どの程度の誤り訂正をするかは、マスクの種類と共に形式情報のところに書かれています。
とりあえずモデル1を作ることはないと思うのでモデル2ということで。データを作る手順ではなくてプログラム作る手順で考えてます。JISの表みればいいのだけど。
データと型とを作るのですが、まずは型から作ってみます。まぁ、普通とは逆かも。
配列は、マスク用とビット用の2階層で用意しました。まずまわりを固めて、そこへマスクをみながらデータを流し込もうかと。データ以外の部分はあとから入れる部分も含めてマスクしておきます。
符号化の方法にいくつかあるので、それを決める。データの入る大きさを選ぶ。位置合わせパターンの数がまず決まっていないとデータに使えるサイズがわからないかもしれない。位置合わせパターンの位置から先にみてみようか。
型番 | モジュール数/ 辺(A) |
位置合わせパターン | 容量 | |
---|---|---|---|---|
中央位置 |
間隔 | |||
1 | 21 | - | ||
2 | 25 | 6,18 | 12 | |
3 | 29 | 6,22 | 16 | |
4 | 33 | 6,26 | 20 | |
5 | 37 | 6,30 | 24 | |
6 | 41 | 6,34 | 28 | |
7 | 45 | 6,22,38 | 16,16 | |
8 | 49 | 6,24,42 | 18,18 | |
9 | 53 | 6,26,46 | 20,20 | |
10 | 57 | 6,28,50 | 22,22 | |
11 | 61 | 6,30,54 | 24,24 | |
12 | 65 | 6,32,58 | 26,26 | |
13 | 69 | 6,34,62 | 28,28 | |
14 | 73 | 6,26,46,66 | 20,20,20 | |
15 | 77 | 6,26,48,70 | 20,22,22 | |
16 | 81 | 6,26,50,74 | 20,24,24 | |
17 | 85 | 6,30,54,78 | 24,24,24 | |
18 | 89 | 6,30,56,82 | 24,26,26 | |
19 | 93 | 6,30,58,86 | 24,28,28 | |
20 | 97 | 6,34,62,90 | 28,28,28 | |
21 | 101 | 6,28,50,72,94 | 22,22,22,22 | |
22 | 105 | 6,26,50,74,98 | 20,24,24,24 | |
23 | 109 | 6,30,54,78,102 | 24,24,24,24 | |
24 | 113 | 6,28,54,80,106 | 22,26,26,26 | |
25 | 117 | 6,32,58,84,110 | 26,26,26,26 | |
26 | 121 | 6,30,58,86,114 | 24,28,28,28 | |
27 | 125 | 6,34,62,90,118 | 28,28,28,28 | |
28 | 129 | 6,26,50,74,98,122 | 20,24,24,24,24 | |
29 | 133 | 6,30,54,78,102,126 | 24,24,24,24,24 | |
30 | 137 | 6,26,52,78,104,130 | 20,26,26,26,26 | |
31 | 141 | 6,30,56,82,108,134 | 24,26,26,26,26 | |
32 | 145 | 6,34,60,86,112,138 | 28,26,26,26,26 | |
33 | 149 | 6,30,58,86,114,142 | 24,28,28,28,28 | |
34 | 153 | 6,34,62,90,118,146 | 28,28,28,28,28 | |
35 | 157 | 6,30,54,78,102,126,150 | 24,24,24,24,24,24 | |
36 | 161 | 6,24,50,76,102,128,154 | 18,26,26,26,26,26 | |
37 | 165 | 6,28,54,80,106,132,158 | 22,26,26,26,26,26 | |
38 | 169 | 6,32,58,84,110,136,162 | 26,26,26,26,26,26 | |
39 | 173 | 6,26,54,82,110,138,166 | 20,28,28,28,28,28 | |
40 | 177 | 6,30,58,86,114,142,170 | 24,28,28,28,28,28 |
位置合せパターンの位置は7の倍数型近くで増えているようなので、それをもとにして計算させるのもいいかもしれない。なんか複雑な計算しましたが、この表をそのまま取り込むのは避けられました。32型だけちょっと特殊かも。
最初の間隔が調整されてますね。6の位置などで、位置検出パターンと重なる場合には位置合せパターンは省略します。
これで、容量の計算もできます。
データ及び誤り訂正に使えるモジュール数は、
int getModuleSize() { int full = version * 4 + 16; full = full*full; // タイミングパターン、形式情報及びその誤り訂正符号を除外したサイズ full -= 64*3; // 位置検出パターン、位置検出パターンの余白パターン if (version > 1) { full -= 25 * ((version+7) / 7) * ((version+7) / 7); // 位置合せパターン full -= 20 * (version / 7) * 2; // タイミングパターン上の位置合せパターン if (version >=7) { full -= 36; // 型情報及びその誤り訂正符号 } } return full; // データと誤り訂正に利用可能なモジュール数 }
で、容量にあわせて使う型を決めます。これを8で割るとバイト数。そのまえにデータをつくらないといけませんが…。
データは、文字、数値、バイナリ、のように何種類かの形で格納できます。エラー訂正も数種類あります。これを決めて何型にするかを決めます。
まぁ・・・そういうことで。JIS規格読むのが手っとり早い。
つくったら配布するかも?
参考