濡れて滲んだ紙のチラシ、角が擦れて傷だらけになった飲食店の卓上POP。そこに印刷されたQRコードを、スマホのカメラはためらいもなく読み取ってしまう。文字が半分消えた紙なら人間でも判読に苦労するのに、なぜ黒白の模様が欠けたQRコードは平然と情報を復元できるのか。
デンソーウェーブとキーエンスが公開する仕様によれば、QRコードには4段階の誤り訂正レベルがあり、最も高いレベル「H」では符号データの最大30%相当が失われても元の情報を復元できる。QRコードはそもそも「一部が壊れること」を前提に設計されており、壊れた分を計算で埋め合わせる仕組みが最初から組み込まれているのだ。
符号データの3割が欠けても情報が消えない理由
QRコードの誤り訂正能力は、デンソーウェーブの公式仕様で4段階に規定されている。復元可能な割合は、コードワード(データを一定のまとまりで区切った単位)に対してレベルLが7%、レベルMが15%、レベルQが25%、そして最も強いレベルHが30%だ。つまりレベルHで作られたQRコードなら、符号データの3割相当が汚れや破れで読み取れなくなっても、残りの情報から元のデータを復元できる計算になる。
ただしこれは理論上の上限だ。復元できるかどうかは壊れた量に加え、どこが壊れたかにも左右される。QRコードはまず3つの角にある位置検出用の模様(ファインダパターン)を見つけることで読み取りを開始する仕様になっており、キーエンスの解説によれば、この部分が汚れると訂正能力の範囲内であってもコード自体を検出できなくなる。
紙の文書や写真であれば、3割が欠ければ当然その3割分の情報は失われる。スーパーのレジで使われる従来の1次元バーコード(縞模様のコード)も、線が大きく欠けると読み取れなくなることが多い。ところがQRコードは違う。データを記録する際にあらかじめ「余分な情報」を上乗せしておき、後から一部が読めなくなっても、残った部分の情報だけで欠損箇所を逆算できるようにしてある。この余分な情報を作る役割を担うのが、リード・ソロモン符号と呼ばれる誤り訂正技術だ。
音楽CDと同じ数式が、汚れたコードを復元する

リード・ソロモン符号は、QRコード専用に開発された技術ではない。音楽CDの読み取りでも同じ方式が使われている。CDの盤面に細かい傷が付いても音飛びせずに再生できるのは、この符号がバイト単位でまとまった誤り(バースト誤り)の訂正に強い性質を持つからだ。
仕組みを簡単に言うと、元のデータを1バイトずつ並べた「多項式」という数式とみなし、あらかじめ決めておいた別の数式(生成多項式)で割り算する。QRコードはこの割り算を、256通りの値だけを扱う特殊な計算規則の上で行う。その割り算で出た余りを、誤り訂正専用の符号語として元データの末尾に付け加えて記録する。読み取る側はコード全体を同じ生成多項式で割り算し、余りがきれいにゼロにならなければ「どこかに誤りがある」と判定したうえで、誤った箇所と本来の値を逆算して差し引く。読み取り側のスマホは、この計算を一瞬でこなして欠損部分を埋めているにすぎない。
紙が破れて模様ごと消えた場合と、汚れで白黒が誤って反転して読まれてしまった場合とでは、実は訂正の負担が違う。前者は「どこが欠けたか」の位置が分かっている分、少ない符号語で直せるが、後者は位置も特定するところから計算が必要になるため、同じ1個の誤りを直すにも通常2個分の符号語を消費する。QRコードはこの2種類の欠損をどちらも計算で扱えるように設計されているが、前述の通り、位置検出用のファインダパターンなど読み取りの起点となる部分が壊れた場合は、そもそもこの計算自体が始まらない。
4段階のレベルは「容量」と「頑丈さ」の綱引きだ

訂正能力が高いほど良いように思えるが、実際には全てのQRコードがレベルHで作られているわけではない。誤り訂正用の符号語を増やすほど、その分だけ元データを記録できる容量が減ってしまうからだ。レベルが高い順にH、Q、M、Lと並べると、この順で格納できる文字数は少なくなる。
キーエンスの仕様によれば、最大サイズのQRコード(バージョン40・レベルL)は数字だけなら7,089字を格納できる。ところが同じマスの数のままレベルをHに切り替えると、誤り訂正用の符号語がその分を占有するため、記録できる文字数は大きく目減りする。誤り訂正は無料の保険ではない。データ容量と引き換えに買う頑丈さだ。
この綱引きがあるからこそ、用途によって使い分ける発想が生まれる。デンソーウェーブの仕様解説では、汚れの心配が少ない環境ではレベルLを選ぶこともあれば、工場の生産ラインや屋外の看板のように汚れや摩耗が避けられない現場ではレベルQやHを選ぶこともあるとされている。ロゴマークを中央に埋め込んでデザイン性を持たせたQRコードも同じ理屈で、コードの一部を意図的に隠す分、訂正能力の高いレベルを選んで隠れた部分を補おうとする例がある。ただしデンソーウェーブ自身は、イラストの重畳や変形は小さな汚れ・欠けが加わっただけでも読み取れなくなる場合があるとして推奨していない。訂正レベルを上げても、隠す面積によっては読み取りを保証できないのが実情だ。
「壊れる前提」の設計は、日本の現場から生まれた
QRコードは1994年、当時デンソーに所属していた原昌宏氏が中心となって開発した。開発の出発点は、部品工場のバーコード読み取りを速くしたいという現場からの要望だった。原氏を含むわずか2人のチームが、従来のバーコードより大容量の情報を、より速く、より正確に読み取れるコードを目指し、約1年半をかけて生み出したのが、現在世界中で使われているQRコードだ。
バーコードスキャナやOCR(光学文字認識)の開発で培った画像処理の技術蓄積が、この開発を支えた。工場の生産ラインでは日々汚れや摩耗にさらされながらコードが使われるため、訂正能力の高いレベルが選ばれる場面も多い。
次にレシートや店頭のポスターで薄汚れたQRコードを見かけたら、それでも読み取れる理由を思い出してほしい。そこにあるのは、壊れることを織り込んで冗長なデータを仕込んでおくという、数学に基づいた設計の勝利だ。同じ数式は音楽CDの盤面にも刻まれており、身の回りの読み取り技術の多くが「壊れる前提」で作られている。黒白の模様1つにも、そうした設計思想が詰まっている。
