QRコードのバージョン(1〜40)は、一辺のマス目の数と1対1で対応しています。つまり数えれば計算で特定できます。本記事では、細かいコードでも現実的に数えるコツと、バージョン7以上に書き込まれている型番情報の読み方を解説します。
バージョンは一辺のモジュール数で決まる
QRコードのバージョンは1から40まであり、格納できるデータ量の枠を表します。バージョンと一辺のモジュール数(マス目の数)は、次の式で1対1に対応しています。
一辺のモジュール数 = 4 × バージョン + 17
逆に言えば、マス目を数えればバージョンは計算で出せます。
バージョン = (一辺のモジュール数 - 17) ÷ 4
バージョン1は21×21、バージョン40は177×177です。モジュール数は必ず21から4ずつ増える奇数(21, 25, 29, 33, ...)になるので、数えた結果がこれに当てはまらなければ、数え間違いか、そもそもQRコードではないと判断できます。
バージョンとモジュール数の対応を確かめる
スライダーでバージョンを、または入力欄に一辺のモジュール数を入れると、対応する値をその場で計算します。ネットワーク接続は不要です。
数え方のコツ — タイミングパターンを使う
細かいQRコードのマス目を端から1つずつ数えるのは現実的ではありません。実務では次の手順が確実です。
- ファインダパターンを物差しにする。 四隅の大きな四角は必ず7モジュール四方です。まずこの7マスぶんの幅を測り、1モジュールの大きさを把握します。
- タイミングパターンを数える。 左上と右上のファインダの間には、黒と白が1マスずつ交互に並ぶ列があります(上から7行目、0起点で行6)。この交互の並びは数えやすいので、ここを数えて全体を割り出します。
- 足し算で確定する。 一辺は「左のファインダ7 + 分離パターン1 + タイミング部分 + 分離パターン1 + 右のファインダ7」で構成されます。つまりタイミングパターンの交互部分が M マスなら、一辺は M + 16 モジュールです。
たとえば交互部分が29マスなら一辺は45モジュール、バージョンは (45 - 17) ÷ 4 = 7 となります。
位置合わせパターンの数でも当たりがつく
数える前におおよそのバージョンを絞りたい場合は、位置合わせパターン(小さな5×5の「回」の字)の個数が目安になります。個数はバージョンごとに決まっており、7バージョンごとに段階的に増えます。
| バージョン | 一辺のモジュール数 | 位置合わせパターンの数 |
|---|---|---|
| 1 | 21 | 0 |
| 2〜6 | 25〜41 | 1 |
| 7〜13 | 45〜69 | 6 |
| 14〜20 | 73〜97 | 13 |
| 21〜27 | 101〜125 | 22 |
| 28〜34 | 129〜153 | 33 |
| 35〜40 | 157〜177 | 46 |
位置合わせパターンがまったく無ければバージョン1で確定、中央に1つだけならバージョン2〜6、というように範囲を狭められます。個数の規則は、中心座標の候補が n 個あるとき n×n の交点に置き、そのうちファインダと重なる3か所を除く(n² - 3)という形になっています。
バージョン7以上には「型番情報」が入っている
バージョン7以上のQRコードには、バージョン番号そのものが符号内に書き込まれています。これを型番情報(Version Information)と呼びます。バージョン6以下では、タイミングパターンを数えれば十分に判別できるため置かれません。
型番情報は18ビットで、内訳は次のとおりです。
- 6ビット:バージョン番号(7〜40を2進数で表したもの)
- 12ビット:それを守る誤り訂正ビット(BCH(18,6) 符号)
形式情報とは異なり、型番情報には XOR マスクが掛かりません。そのため先頭6ビットを読めば、そのままバージョン番号の2進数表記になります。たとえばバージョン7なら 000111(=7)で始まり、18ビット全体は 000111110010010100 です。バージョン40なら 101000(=40)で始まり、全体は 101000110001101001 になります。
型番情報も同じ内容が2か所に配置されます。ひとつは右上のファインダパターンの左側(6行×3列)、もうひとつは左下のファインダパターンの上側(3行×6列)です。BCH符号で保護されているため、多少汚れていても訂正できます。
画像から数えるときの実務的な注意
- まず余白を確認する。 クワイエットゾーン(4モジュール以上)を含めて写っているか。余白ぶんを数に含めてしまう取り違えが起きやすい部分です。
- にじみに注意する。 印刷物の写真では隣り合う黒が繋がって見えることがあります。タイミングパターンの交互部分を拡大して、1マス単位が分離して見える倍率で数えます。
- 数えた結果を検算する。 (モジュール数 - 17) が4で割り切れない場合は数え間違いです。近い値のうち4で割り切れるものに直します。
- 連結QRは別物。 分割して複数のQRコードにまたがるもの(構造的連接)は、1枚ごとにバージョンが決まります。
バージョンが分かると何が分かるか
バージョンが決まると、そのコードに入りうるデータ量の上限が決まります。実際の容量は誤り訂正レベルと符号化モード(数字・英数字・8ビットバイト・漢字)の組み合わせで変わるため、容量表と合わせて見る必要があります。詳しくは「QRコードの仕様を完全理解する」にまとめています。
また、バージョンが大きい(マス目が細かい)ほど、印刷やカメラの解像度に対する要求が厳しくなります。読み取り不良が出ている場合は、バージョンを下げられないか(=データを短くできないか)を検討する価値があります。原因別の対処は「QRコードが読み取れない原因と直し方」を参照してください。
まとめ
- 一辺のモジュール数 = 4 × バージョン + 17。逆算すればバージョンが出る。
- 数えるときはタイミングパターンの交互部分を数え、16を足すと一辺のモジュール数になる。
- 位置合わせパターンの個数で、バージョンの範囲をおおまかに絞れる。
- バージョン7以上には型番情報(18ビット、マスクなし)があり、先頭6ビットがバージョン番号そのもの。
- 数え間違いは (モジュール数 - 17) が4で割り切れるかで検算できる。
よくある質問(FAQ)
QRコードのバージョンはどうやって調べますか?
一辺のモジュール数を数えて、(モジュール数 - 17) を4で割ると求まります。一辺のモジュール数は「4 × バージョン + 17」で決まり、バージョン1は21×21、バージョン40は177×177です。
細かいQRコードのマス目を数えるコツはありますか?
タイミングパターンを使います。左上と右上のファインダパターンの間にある、黒と白が1マスずつ交互に並ぶ列を数え、その長さに16を足すと一辺のモジュール数になります。ファインダパターンが必ず7モジュール四方であることも物差しとして使えます。
位置合わせパターンの数からバージョンは分かりますか?
おおよその範囲が分かります。バージョン1は0個、バージョン2〜6は1個、7〜13は6個、14〜20は13個、21〜27は22個、28〜34は33個、35〜40は46個です。ひとつも無ければバージョン1で確定します。
型番情報とは何ですか?
バージョン7以上のQRコードに書き込まれる18ビットの情報で、バージョン番号6ビットとBCH(18,6)符号の誤り訂正12ビットからなります。形式情報と違ってXORマスクが掛からないため、先頭6ビットがそのままバージョン番号の2進数表記になります。右上のファインダの左と左下のファインダの上の2か所に配置されます。