バーコードコラム

QRコードの誤り訂正の限界について

2022.07.27

なぜQRコードは汚れに強く、読み取り速度が速いのか?

QRコードのしくみ」でサラッとふれましたが、QRコードには「誤り訂正機能」が組み込まれています。本節ではこの「誤り訂正機能」についてちょっと深掘りしてみます。

 

リード・ソロモン符号とは

「誤り訂正機能」の正体はリード・ソロモン符号という符号化方式です。この符号化方式自体はべつにQRコードの専売特許などではなく、現代の情報社会ではむしろ広汎に使われているものです。QRコードと同じ2次元コードの一種である「データマトリックス」をはじめ、地デジ放送やCD、DVD、ハードディスクなど、通信や記憶媒体の分野でリード・ソロモン符号がなければ実現しないものがたくさんあります。

リード・ソロモン符号の理論は非常に難解なので、詳細な解説は専門書などの文献にあたってください。ここでは概略のみ説明します。

1)元のデータを数値に変換します。
2)その数値データから誤り訂正用のデータを計算し、末尾に付与します。

図示すると以下のようになります。元のデータ =「mediaseek」という文字列の場合です。

 

上図でいうところの赤字部分が誤り訂正用データです。

さて、そうやってできたデータが汚れなどで損傷してしまった場合も、特殊な計算によって訂正することができます。ここがリード・ソロモン符号のスゴいところですね。下図がそのイメージです。

 

とはいえ訂正可能な量には限度があり、無限に訂正できるわけではありません。まあ当たり前ですね。ではどれくらい訂正できるかというと、その数は、誤り訂正用に付与するデータの長さによります。

 

4段階の誤り訂正レベル

QRコードには誤り訂正レベルが4段階あり、レベルが高い順にH → Q → M → Lとなっています。このレベルが高いということはその分、誤り訂正用データが増えるということであり、同時に、格納可能な元のデータ量が減ることを意味します。トレードオフの関係ということですね。具体的にいうと、誤り訂正レベル = H(最高レベル)とL(最低レベル)とでは、格納できるデータ量の差は2倍以上にもなります。誤り訂正のために費やすデータが少なければ、その分を格納用データにまわせる――ザックリいうとそういうことです。

ポイント
・誤り訂正用のデータを付与して一連のデータとして扱う
・一定量までは損傷しても訂正可能
・付与する誤り訂正用データを増やすと訂正可能な量も増える

 

誤り訂正レベルについてありがちな誤解


誤り訂正レベルは上表のとおり表されますが、ここでいうパーセントとは、いったい<何の>パーセンテージなのでしょうか。

ありがちな誤解は、“レベルHだと、QRコードの約30%が汚れてたり損傷してたりしても訂正できるってことでしょ?”というものです。残念ながらこれは正しくありません。正解は、“レベルHなら、RSブロックの約30%が訂正可能”となります。

ではここで、「RSブロック」という新用語について解説しましょう。RSブロックとはReed Solomonブロックの略で、QRコードにおいて誤り訂正を行うために分割されたデータの単位のことです。ブロックの数はQRコードのバージョンと誤り訂正レベルによって決まり、1~81個になります。例えば、QRコードバージョン = 7、誤り訂正レベル = Hの場合、RSブロック数は5個です。

ついでに「データコード語」「誤り訂正コード語」についても説明しておきましょう。

リード・ソロモン符号化の手順について思い出してください。元のデータが文字列「mediaseek」の場合、1文字ずつ数値データに変換していきましたね。m → 109、e → 101、d → 100、…のように。QRコードのデータはまずRSブロックに分割された後、リード・ソロモン符号化のため1バイトごとに区切られて数値化されます。これを「データコード語」といいます。そしてその後、誤り訂正用に末尾にデータを付与しましたね。これを「誤り訂正コード語」と呼んでいます。

上に挙げたQRコードバージョン = 7、誤り訂正レベル = Hの場合、RSブロック数は上記のとおり5個。RSブロック1個あたりのコード語数は39か40。そのうち訂正可能なコード語数は13と定まっています。「QRコード全体の」約30%なのではなく、「RSブロックの」約30%ということが判りますね。

 

実例で解説:「RSブロックの約30%が訂正可能」とは


図a
これは損傷していて読み取れないQRコードです。

 


図b
図aの損傷させた箇所が判りやすくなるよう、赤に塗ったものです。

 


図c
こちらは、一部損傷させてはありますがそれでも読み取れるQRコードです。

 


図d
図cの損傷箇所を赤く塗ったものです。

いかがでしょう。一目瞭然ですが、図dの損傷箇所は図bのそれよりはるかに多いですよね。しかし図dは読み取れ、図bのほうが読み取れない。

これは、図bは一つのRSブロックが集中的に損傷しているため訂正能力の限界を超えてしまっており、それで読み取り不可になってしまっているのです。対して図dは、すべてのRSブロックが損傷していますが、訂正能力の範囲内に収まっているため、誤り訂正が効き、読み取れるわけです。誤り訂正はQRコード全体で行われるのではなく、RSブロック単位で行われるものだということが判る例です。

株式会社メディアシーク
〒108-0072 東京都港区白金1丁目27-6 白金高輪ステーションビル
https://www.mediaseek.co.jp/
IR・広報担当 E-mail:press@mediaseek.co.jp

システム開発・
コンサルティング
カスタムメイド・システムソリューション
パッケージソリューション
お客様の声
お役立ちコラム
システム開発・コンサルティングのお問い合わせ