COLUMN

QRコードはなぜ一部が欠けても読めるのか——誤り訂正の仕組み

汚れたポスターのQRコードが普通に読めたり、真ん中にロゴが入ったQRコードが成立したりするのは、よく考えると不思議です。画像の一部が失われているのに、なぜ元のURLを復元できるのか。鍵は「誤り訂正」という仕組みにあります。

QRコードの基本構造

QRコードの三隅にある大きな四角は「切り出しシンボル(ファインダーパターン)」と呼ばれ、カメラがコードの位置と向きを見つけるための目印です。ここが隠れると読み取りは一気に難しくなります。残りの領域に、白黒のマス(モジュール)としてデータ本体と、後述する訂正用の符号が敷き詰められています。

誤り訂正=あらかじめ持っておく「予備の情報」

QRコードは、データ本体に加えて、リード・ソロモン符号という方式で作った訂正用の符号を一緒に埋め込んでいます。ざっくり言えば「一部が読めなくても残りから逆算できるように、冗長な情報を予め持たせておく」仕組みです。このおかげで、汚れや欠けで一部のマスが読めなくても、残った部分から元のデータを数学的に復元できます。

どれだけ欠けに耐えられるかは、生成時に選ぶ誤り訂正レベルで決まります。Lは約7%、Mは約15%、Qは約25%、Hは約30%の欠損まで復元可能です。レベルを上げるほど頑丈になりますが、その分訂正用の符号が増えるため、同じ内容でもコードは細かく複雑になります。

ロゴ入りQRが成立する理由

中央にロゴを重ねたQRコードは、実は「わざと一部を欠けさせている」状態です。誤り訂正の復元力の範囲内であれば、ロゴで隠れた部分は計算で補われるため、問題なく読み取れます。だからロゴを入れる場合は、復元力に余裕のあるレベルH(約30%)を選ぶのが定石です。逆に、画面表示だけで汚れの心配がないなら、レベルLやMでコードをシンプルに保つ方が読み取りやすくなります。

当サイトのQRコード生成では、誤り訂正レベルの選択と中央へのロゴ埋め込みの両方に対応しています。生成はすべてブラウザ内で行われるため、社内URLのような公開したくない情報でも安心して使えます。

← コラム一覧へ