QRコードの誤り訂正レベルと、印刷して読めなくなる理由
QRコードの生成ツールには、たいてい「誤り訂正レベル」という設定がある。L・M・Q・Hの4段階から選べ、「迷ったらHにしておけば安全」という説明もよく見る。
それは、いつも正しいわけではない。
誤り訂正レベルを上げることは、同時にQRコードを扱いにくくする方向にも働く。公式の資料にある数字を追って、その理由を確かめる。
4段階が復元できる割合
QRコードは、コードの一部が汚れたり欠けたりしても、リード・ソロモン符号という誤り訂正の仕組みでデータを復元できる。その復元できる割合が、L・M・Q・Hの4段階だ。
QRコードの規格を管理するDENSO WAVEの公式サイトによると、4段階の復元率はこうなっている。
| レベル | 復元できる割合 |
|---|---|
| L(Low) | 約7% |
| M(Medium) | 約15% |
| Q(Quartile) | 約25% |
| H(High) | 約30% |
同じ資料では、Mが最も標準的に選ばれるレベルとも説明されている。Hが最大なのは確かだが、それは「常にHが正解」という意味ではない。
レベルを上げると、マス目の使い道が変わる
誤り訂正のためのデータは、元のデータにあとから足される。
QRコードには1〜40の「バージョン」があり、バージョンが上がるほどマス目(モジュール)が増える。バージョン1は21×21マスで、1つ上がるごとに上下左右へ4マスずつ大きくなる。そして、同じバージョンでも、誤り訂正レベルを上げるほど、本来のデータに使えるマス目は減る。
公式の容量表にある、バージョン3(29×29マス)の英数字モードの上限がこれだ。
| レベル | 収容できる文字数(英数字) |
|---|---|
| L | 77文字 |
| M | 61文字 |
| Q | 47文字 |
| H | 35文字 |
同じ29×29マスでも、Hで収まる文字数はLの半分以下になる。逆に言えば、同じ文字数を収めるなら、Hのほうが大きいバージョン(=多いマス目)を要求しやすい。
マス目が増えると、印刷したときの1マスが小さくなる
ここからが、印刷で困る理由になる。
QRコードは、周囲に4マス分の余白(クワイエットゾーン)を空けることが規格で決まっている。読み取り機はこの余白を目印にコードの位置を認識するため、省略すると読み取りに影響する。
印刷する物理サイズが決まっている場合、マス目の数が増えるほど、1マスあたりの大きさは小さくなる。DENSO WAVEの資料にある計算例はこうなっている。400dpiのプリンタで1マスを4ドットで印刷した場合、1マスの物理サイズは次の式で求まる。
25.4mm ÷ 400dpi × 4ドット/マス = 0.254mm/マス
必要なマス目の数が29×29から33×33に増えても印刷できる面積が変わらないなら、1マスはさらに小さくなる。DENSO WAVEは、安定した読み取りのために1マスを4ドット以上で構成することを推奨している。マスが小さくなるほど、この条件を満たせるプリンタや印刷解像度の範囲が狭くなる。
読み取り側にも、決まった正解が無い
読み取り機ごとに、認識できる最小のマスサイズは異なる。
公式資料には、業務用スキャナの解像度が0.1mm〜0.25mm程度と型番別に載っている一方、カメラ型(スマートフォンのカメラなど)の読み取り精度は「レンズによって変わる」としか書かれていない。つまり、スマホで読ませる前提のQRコードには、「このサイズなら絶対安全」という公式の基準が無い。
誤り訂正レベルを上げてマスを小さくしても、それを読み取る側のカメラがそのマスを解像できなければ、そもそもコードとして認識されない。「壊れても直せるようにする」ことと「読み取りやすくする」ことは、別の方向に働くことがある。
Hにしておけば安全、とは限らない理由
ここまでをつなげると、こうなる。
1. Hはレベルの中で最も復元率が高い2. しかし同じデータ量なら、Hは他のレベルよりマス目を多く必要としやすい3. マス目が多いほど、同じ印刷サイズでは1マスが小さくなる4. 1マスが小さいほど、汚れや距離に弱くなり、そもそも読み取れないこともある
「壊れても直せる」ようにするために選んだHが、壊れていなくても読めないコードを作ってしまうことがある、ということだ。
印刷物が大きく、余白にも余裕があるなら、Hを選ぶ理由は十分にある。名刺やラベルのように印刷面積が小さいなら、L・Mのほうが安定することもある。
実務で効くのは「データを短くする」こと
容量表を見ると分かるとおり、同じレベルなら、文字数が少ないほど小さいバージョンで済む。QRコードにURLを載せるとき、長いURLをそのまま使うより、短縮したURLを使うほうが、マス目を減らせる。
誤り訂正レベルを上げて頑丈にするより、そもそも運ぶデータを減らしてマスを大きく保つほうが、印刷物では効くことが多い。
まとめ
- 誤り訂正レベルは4段階(L 約7%・M 約15%・Q 約25%・H 約30%)。 数値は復元できるデータの割合
- レベルを上げると、同じデータでもマス目が増えやすい。 マス目の数はバージョン(1〜40)が決め、
レベルは同じバージョンで運べるデータ量を左右する
- マス目が増えると、同じ印刷サイズでは1マスが小さくなる。 4マス分の余白も必須
- 読み取り精度、特にスマホのカメラは機種依存。 「このサイズなら安全」という基準は無い
- 迷ったらM、印刷サイズが小さいならデータを短くするほうが、Hに上げるより効くことがある
数値の出典
誤り訂正レベルの復元率、容量表、クワイエットゾーンの規定、印刷時のマスサイズの計算例、読み取り機の解像度は、いずれもQRコードの規格を管理するDENSO WAVEの公式サイト(qrcode.com)に掲載されている一次情報から確認した。独自に測定した数値ではない。