QRコードのバージョンとレベルとマスクパタン JIS0510の定義【QRコードを解読する 第4回】

はじめに

前回までは基礎編ということで、比較的わかりやすくQRコードの符号化。リードソロモン符号の仕組みについて紹介してきました。今回からは深淵編ということで、具体的なエンコード(文字列からQRコードにする)プログラムと、デコード(QRコードを読み取る)でのパリティ方式の理論、バーレカンプ・マッシー法やチェン探索などについて、追っていこうと思います。

理論に入る前に、今回は、QRコードの仕様についてまとめます。

QRコードの仕様まとめ

QRコードでは、左上のファインダパタンの周り、および左下と右上のファインダパタンの側面にそのQRがどのバージョンなのか?どのようなマスクをしているのかについての情報を入れています。

QRコードリーダやQRコードジェネレーターは、指定したバージョンなどをここに入れたり読み解いたりすることで、様々なサイズや形式のQRコードを1つの仕組みで読み取れるように設計されています。

QRコードのバージョン情報が書かれているビットの配置。

図1 QRコードのバージョン情報の配置

バージョン(サイズ)

QRコードのバージョンのうち主要なものを挙げると以下のようなものがあります。参考:JIS 0510[1]

表1 QRのバージョンとサイズの対応

バージョンサイズ(モジュール数)数字(桁)英数字(文字)バイナリ・8bit(バイト)漢字・Shift-JIS(文字)
121 × 2141251710
225 × 2577473220
537 × 3730818610665
1057 × 57861520346213
2097 × 973,0671,8521,220758
40 (最大)177 × 1777,0894,2962,9531,817

誤り訂正レベル

誤り訂正レベルとは、どれだけ破損していても復元できるか?を表すレベルです。これまで説明してきたリードソロモン符号の誤り訂正用のbyteをどのくらい作るか?という設定を表します。

表2 誤り訂正レベルとリードソロモン符号の割合

誤り訂正レベルレベルの意味復元可能な割合(汚れへの強さ)全体に占めるリード・ソロモン符号の割合(目安)
L (Low)データ容量を最優先7%20〜27%
M (Medium)標準的(最も一般的)15%36〜38%
Q (Quartile)汚れやすい環境向け25%50〜55%
H (High)工場やヘビーユース向け30%60〜65%

マスクパタン

マスクパタンとは、画像処理のマスクと同じように、特定領域を反転させたりするもののことです。QRコードにおけるマスクは全部で7パタンあります。

表3 JIS X 0510で定義された8種類のマスクパタン

参照子 (2進数)マスク番号条件式(数式 / Pythonライクな表記)
0000(r + c) % 2 == 0
0011r % 2 == 0
0102c % 3 == 0
0113(r + c) % 3 == 0
1004(r // 2 + c // 3) % 2 == 0//は切り捨て除算
1015(r * c) % 2 + (r * c) % 3 == 0
1106((r * c) % 2 + (r * c) % 3) % 2 == 0
1117((r + c) % 2 + (r * c) % 3) % 2 == 0

引用元:JIS 0510[1]. p49 ,表10−マスクパターン生成条件より作成

数式で見ると難しそうですが、それぞれを画像にしてしまえばわかりやすいです。マスク処理ではこのマスクパタンを用いて白黒を反転させます。

JIS 0510におけるQRコードのマスクパタン

図2 QRコードのマスクパタン

引用元:JIS 0510[1]. p50 ,図21−1型シンボルに対するマスクパターンより引用

まとめ

今回は、QRコードのバージョンや誤り訂正レベル、マスク処理に関する仕様についてまとめました。1つのバージョンだけをとっても、誤り訂正レベル4種とマスクパタン8種で32パターンあり、全40バージョンを合わせると 1,280パターン もの組み合わせが存在します。

これがQRコードが用途を問わず柔軟に使われている最大の理由です。

対象にするバージョン2とレベルQ

これからエンコーダとデコーダを作るにあたり、これらすべてに対応することは困難(かつ、面倒すぎる)なので、アライメントパタンがあり、かつ、ある程度情報量も入れられる、バージョン2の誤り訂正レベルQ。マスクは市松模様(000)をターゲットに作っていこうと思います。

次回からは、いよいよこの仕様をベースにして、文字列をQRコードのデータに変換するエンコーダの作成や、バーレカンプ・マッシー法などの数学的アプローチを用いたデコーダの実装といった「深淵編」へと突入します。段階を追ってコードとともに解説していく予定なので、QRコードを完璧に理解したい方はぜひ読んでみてください。

次回:自作QRコードエンコーダへの道 ガロア体をプログラムする

関連記事は、2026年6月18日に公開予定 (あと9時間)

関連記事

この記事シリーズでは、QRコードの符号化をCRCと比較しながら流れを把握し、QRコードを自作できるところまで開設する予定です。良ければほかの記事も覗いていってみてください。

第1回:CRCと比較してリードソロモン符号の仕組みを大まかに理解する。
QRコードを解読する:エラーはどうやって直る?リード・ソロモン符号の基本 【第1回】
第2回:デジタル世界の数学「ガロア体」を超ざっくり理解しよう!
デジタル世界の数学「ガロア体」を超ざっくり理解しよう!【QRコードを解読する 第2回】

参考文献
1. 日本工業規格 , X 0510:2018  (ISO/IEC 18004:2015)  https://kikakurui.com/x0/X0510-2018-01.html