飲食店や駅の改札、キャッシュレス決済など、身の回りでQRコードを目にしない日はありません。スマートフォンをかざすだけで瞬時にURLや文字情報が認識されます。しかし、あの正方形に散らばる白黒のモザイク模様の中に、一体何がどのように書き込まれているのでしょうか。ただの幾何学模様に見えるマス目がどのように文字を表し、なぜ斜めから撮影したり多少汚れたりしても正しく読み取れるのか、その仕組みは一見すると不思議に思えます。
本稿では、JISおよびISOで標準化されているQRコード(Model 2)を対象に、その内部構造を解き明かします。白黒のマスが表す二進法の基本から、カメラが瞬時にコードを捉える幾何学的目印、読み取りを安定させる白黒反転、効率的なデータ変換、そして汚れや欠損に耐える誤り訂正まで、その仕組みを分かりやすく解説します。
1. 白黒のマスが表すもの―1モジュール=1ビットの二進法
QRコードを構成する最小単位の正方形を、規格上の用語で「モジュール」と呼びます。白と黒で塗り分けられたこの1マスは、コンピュータが扱う二進法の「1ビット(0または1)」に対応しており、一般的に黒が1、白が0として扱われます。
コンピュータでは8個のビットをまとめて「1バイト」と呼ぶのと同様に、QRコードの規格でも8個のモジュールをひとまとまりとして扱い、これを「コード語(Codeword)」と呼びます。アルファベットや数字、日本語の文字、記号などは、すべてこのコード語の並びとして表現されます。
INTERACTIVE
実際に動かして確かめる
条件や数値を変え、本文で説明した関係を確認できます。しかし、QRコードの全体がすべて文字やURLのデータで埋め尽くされているわけではありません。もし全体をランダムな白黒のマスだけで埋めてしまうと、カメラで撮影した画像の中から「どこがコードで、どこが背景か」「どちらが上を向いているか」「1マスの境界はどこか」を識別できなくなってしまいます。
そのため、QRコードの内部は大きく分けて次の2つの領域に役割分担されています。
- 機能パターン(機能領域):データの記録には使われず、カメラがコードの位置、向き、大きさ、傾き、歪みを正確に検出するためにあらかじめ定められた目印。
- 符号化領域:実際に伝えたいデータ(文字やURL)と、汚れや破損を修復するための「誤り訂正コード」が格納される領域。
以下の図は、標準的なQRコード(Model 2)の基本構造を示したものです。

図の読み方と基本構造
上の図に示されているように、QRコードの主要な機能パターンには以下のものがあります。
- 位置検出パターン(ファインダパターン):左上・右上・左下の三隅に配置された二重の正方形です。右下には配置されていません。
- 分離パターン(セパレータ):位置検出パターンの周囲を取り囲む白の帯で、周囲のデータマスと目印が混ざるのを防ぎます。
- タイミングパターン:三隅の位置検出パターンをつなぐように伸びる、白黒が1マスずつ交互に並んだ直線です。
- 形式情報(フォーマット情報):誤り訂正レベルや適用されたマスクパターンの種類を記録した15ビットの情報です。位置検出パターンのすぐそばに二重配置されています。
- 位置合わせパターン(アライメントパターン):バージョン2以上のやや大きなコードにおいて、規格で定められた特定の位置に配置される小さな同心正方形です。
- クワイエットゾーン:コードの最も外側を取り囲む、幅4モジュール以上の何もない空白(白余白)です。
なお、この図はModel 2の基本的な配置を示したものであり、QRコードのバージョン(1辺のマス目の数)によってマスの総数や位置合わせパターンの配置個数は異なります。また、Micro QRコードや長方形のrMQRコードといった別規格では、機能パターンの数や配置そのものが異なりますが、本稿では私たちが日常で目にする最も代表的なModel 2を対象に解説を進めます。
2. カメラはどうやってコードを見つけるのか―中心を通る明暗比が目印になる
スマートフォンでQRコードを読み取るとき、カメラを大まかにかざしただけでも、即座に画面上に認識枠が表示され、中身が読み取られます。この素早い認識を可能にしているのが、三隅に配置された「位置検出パターン(ファインダパターン)」です。
なぜ三隅にだけ四角があるのか
位置検出パターンは「左上」「右上」「左下」の3か所にのみ配置され、「右下」にはありません。これには明確な幾何学的理由があります。もし四隅すべてに対称に配置されてしまうと、コードが上下逆さまなのか、90度回転しているのかを外見から一意に特定できません。あえて1つの角を空けておくことで、三角形の非対称な配置が生まれ、カメラは画像がどの方向を向いていても瞬時に正しい向き(回転角度)を特定できるのです。
中心を通る走査線の明暗比「1 : 1 : 3 : 1 : 1」
この位置検出パターンには、数学的に極めて優れた特徴が組み込まれています。黒い外枠、白い隙間、黒い中心の正方形の幅の比率が「1 : 1 : 3 : 1 : 1」に設計されている点です。
理想的な図形において、このパターンの中心を通る直線をどの角度(水平、垂直、斜め360度)で走査しても、白と黒の長さの比率は必ず「黒1 : 白1 : 黒3 : 白1 : 黒1」になります。開発元のデンソー(現デンソーウェーブ)は、街中の印刷物や看板、新聞などを徹底的に調査し、自然界や活字印刷物の中にこの比率が出現する確率が極めて低いことを突き止めました。そのため、カメラの読み取り処理は、画像内を走査してこの特異な比率を見つけるだけで、「ここにQRコードがある」と確信できるのです。
理想図形と実環境の画像処理の違い
ただし、現実のスマートフォンのカメラで撮影される画像は、常に真正面から撮影された理想的な図形とは限りません。斜めからの遠近変形、手ブレ、ピンボケ、照明の反射や影、レンズによる歪みが必ず発生します。
そのため、実際の画像処理エンジンは単に1本の走査線で比率を測るだけでなく、明暗のグラデーションから白黒の境界(エッジ)を検出して二値化し、輪郭線を抽出して正方形の中心候補を絞り込みます。そして、3つの位置検出パターンの中心座標を手掛かりにしながら、コードの外周や後述する内部の基準パターンと組み合わせることで、画像上での格子の広がり方を推定します。
格子の歪みを補正する物差しと余白
位置検出パターンを見つけた後、カメラは各モジュールが画像のどこに並んでいるかを正確に割り出す必要があります。ここで活躍するのが以下の要素です。
- タイミングパターン:左上と右上、左上と左下の位置検出パターンの間を走る白黒交互の列です。このマス目を数えることで、画像上でモジュールがどのくらいの間隔で並んでいるかという「モジュール間隔」を測定します。
- 位置合わせパターン:バージョン2以上のコードにおいて、規格で定められた特定の位置(格子状の交点)に配置されます。紙が曲がっていたり、カメラのレンズで周辺が歪んでいたりしても、このパターンを基準に局所的な位置ズレを検出し、変形補正を助けます。
- クワイエットゾーン:コードの外周を囲む「4モジュール以上」の白余白です。もしQRコードのすぐ隣に文字やイラストが接していると、カメラはそこまでコードの一部と誤認してしまい、輪郭を正しく認識できません。十分な余白があって初めて、周囲の背景からコードを独立した領域として切り出せます。
このように、QRコードは3点のみで直接実空間の距離を測っているわけではありません。3個の位置検出パターンを基点とし、タイミングパターンや位置合わせパターン、輪郭などの複数の手がかりを統合して画像全体の格子(グリッド)を幾何学的に推定しているのです。
3. 読み取りの準備を整える―形式情報とマスク処理の解除
カメラが画像上の格子を推定できたら、いよいよ内部のマス目を読み取る段階に進みます。しかし、いきなりデータ本体を読み始めることはできません。読み取り機にはまだ「どの誤り訂正レベルで作られているのか」「どんな白黒反転(マスク)が施されているのか」という設定が分からないからです。
そこで復号処理において、格子の推定直後に真っ先に読み取られるのが「形式情報(フォーマット情報)」です。
形式情報の15ビットと二重配置
形式情報は、QRコードの読み取りに必要な基本設定を格納した、合計15ビットの情報です。その内訳は次のようになっています。
- 誤り訂正レベル(2ビット):後述する4段階(L、M、Q、H)のいずれが使われているかを示します。
- マスクパターン参照番号(3ビット):8種類あるマスクパターンのうち、どの番号が適用されているかを示します。
- 誤り訂正用ビット(10ビット):この5ビットの設定値自体が汚れて読めなくなるのを防ぐため、BCH符号という誤り訂正アルゴリズムによって10ビットの冗長データが付加されています。
この計15ビットの情報は、位置検出パターンのすぐ隣にある白黒のマスとして配置されています。さらに極めて重要な点として、形式情報は2か所に重複して配置(二重配置)されています。左上のパターンの周囲と、右上および左下のパターンの脇に分かれて同じ15ビットが記録されているため、たとえ片方の形式情報が指や汚れで隠れていても、もう片方が無事であればコード全体の設定を正しく把握できます。 (なお、バージョン7以上の大きなコードでは、これに加えて18ビットの「型番情報」も2か所に二重配置されます)。
マスク処理とは何か―なぜ白黒を反転させるのか
形式情報からマスクパターン番号を取得すると、次は「マスク処理の解除」が行われます。
QRコードを作成する際、元のデータをそのまま白黒のマスに変換すると、偶然「真っ白な領域」や「真っ黒な領域」が広範囲に固まってしまうことがあります。また、最悪の場合、データ領域の中に位置検出パターンと同じ「1:1:3:1:1」の並びが偶然現れてしまう危険性もあります。広い単色領域があると、カメラが明るさの変化を見失ってクロック同期(マスの境界判定)に失敗したり、二値化の閾値処理が狂ったりする原因になります。
これを防ぐために行われるのが「マスク処理」です。マスク処理とは、規格で定められた8種類の格子計算式(行番号と列番号の和が偶数のマス、など)に基づいて、規則的にモジュールの白黒を反転させる操作です。マスが黒なら白へ、白なら黒へと反転させます。数学的には、データビットとマスクビットの「排他的論理和(XOR演算)」を行っています。エンコード時には8種類のマスクが試され、白黒の偏りや目印に似た並びが最も少ない最適なマスクが1つ選ばれます。
マスクに関する重要な事実と誤解
マスク処理について理解する上で、以下の技術的な正確性を押さえておく必要があります。
- マスクは「白黒の反転」であり、「シャッフル(並べ替え)」ではない:データの格納位置がバラバラに移動しているわけではなく、決まった位置のビットが反転しているだけです。
- 符号化領域のみが対象である:マスク処理が施されるのはデータと誤り訂正符号が入る符号化領域だけであり、位置検出パターン、タイミングパターン、形式情報などの機能領域は反転されません。
- 暗号化ではない:マスク処理の目的はあくまでカメラの光学的読み取りを安定させることであり、セキュリティのための秘匿化(暗号化)ではありません。マスクの規則は規格書にすべて公開されているため、形式情報の3ビットさえ読めれば、誰でも同じ計算式で反転し直して一瞬で元のビット列に戻せます。
4. 白黒から元の情報へ―コード語の取り出しとデータの解釈
マスクの反転を解除すると、符号化領域には元の正しいデータビットが整然と並んだ状態になります。ここからいよいよ「元の文字やURL」を復元するプロセスに入ります。
復号の全体の流れを整理すると、次の順序で進みます。
- 画像から格子の位置と歪みを推定する
- 形式情報(および型番情報)を読み取る
- 符号化領域のマスク反転を解除する
- モジュールからビットを拾い集め、コード語(8ビット単位)を取り出す
- ブロックごとに誤り訂正計算を行う
- モード指示子に従って元の文字列を解釈する
この手順からも分かるように、文字としての解釈は「誤り訂正が完了した後」に行われます。途中に誤りがあっても訂正計算で正しいビット列に修復されてから解釈されるため、文字化けを起こさずに復元できるのです。
コード語の取り出し順序
マスクが解除された符号化領域からビットを拾い出す経路は、規格で厳密に決まっています。基本的にはコードの「右下」を起点とし、縦2列のモジュールをひと組として、右から左へと進みながら、下から上、上から下へとジグザグに蛇行するように進みます。途中に位置合わせパターンや形式情報などの機能パターンがある場合は、そこをスキップして迂回します。
こうして集められたビットは、8個ごとにまとめられて「コード語(8ビット=1バイト)」として順次格納されます。
誤り訂正後のデータ解釈―モード指示子
誤り訂正を経て修復されたデータ列の先頭には、必ず4ビットの「モード指示子」が配置されています。このモード指示子によって、その後にどのような形式でデータが詰め込まれているかが宣言されます。代表的なモードには以下のものがあります。
- 数字モード(指示子:`0001`):0から9までの数字のみを扱うモードです。数字3桁を10ビット(2の10乗=1024通り)で表現するため、1文字あたり約3.3ビットという非常に高い圧縮効率で記録できます。
- 英数字モード(指示子:`0010`):数字、英大文字、および特定の記号(空白、
$、%、*、+、-、.、/、:)の計45文字を扱います。2文字を11ビット(45×45=2025通り、2の11乗=2048通り)にまとめて記録し、1文字あたり約5.5ビットで効率化します。 - バイトモード(指示子:`0100`):8ビットのバイトデータをそのまま格納する最も汎用的なモードです。URLや一般的な英小文字混じりのテキスト、バイナリデータに使われます。重要な点として、バイトモードはあくまで「8ビットのバイト列」を保存する方式であり、そのバイト列がUTF-8なのかShift-JISなのかといった文字コードの解釈は、読み取り側のアプリケーションやシステム側で別途処理する必要があります。
- 漢字モード(指示子:`1000`):Shift-JISにおける漢字コードの特定領域からオフセット値を減算し、1文字を13ビットで表現します。通常のバイトモードでは日本語の漢字1文字に16ビット(2バイト)または24ビット(UTF-8で3バイト)を消費しますが、漢字モードを使うことで大幅に容量を節約できます。
モード指示子の直後には、そのモードで何文字格納されているかを示す「文字数指示子」が続きます。
終端パターンとパディング
データ文字列の記録が終わると、データの末尾を示す「終端パターン」として最大4ビットのゼロ(0000)が付加されます(残りの容量が4ビット未満の場合はその容量分のゼロ)。
さらに、QRコードのバージョンと誤り訂正レベルによって全体の総コード語数は固定されているため、実際のデータが短くて領域が余った場合は、空き容量を埋めるための「パディング」が行われます。パディングでは、空きスロットにダミーコード語である「11101100(0xEC)」と「00010001(0x11)」が交互に隙間なく敷き詰められます。これにより、常に決まったデータ長として誤り訂正の計算に引き渡すことができるのです。
5. 汚れや欠けに耐える仕組み―リード・ソロモン符号と訂正の限界
QRコードの最大の特徴といえば、多少の汚れや印刷のカスレ、欠損があっても読み取れる「誤り訂正能力」です。この強力な復元力を生み出しているのが、数学の代数学を応用した「リード・ソロモン符号(Reed-Solomon Codes)」です。
リード・ソロモン符号は、音楽用CDやDVD、人工衛星との宇宙通信など、データの欠落やノイズが避けられない環境で幅広く実績を持つ誤り訂正アルゴリズムです。QRコードでは、元のデータコード語から数学的な多項式計算を行って誤り訂正コード語(パリティ)を算出し、これをデータの後ろに付加しています。
4段階の誤り訂正レベル
QRコードには、用途や印刷環境に応じて選択できる4つの誤り訂正レベルが用意されています。
| レベル | 誤り訂正能力(目安) | 主な用途・特徴 |
|---|---|---|
| L(Low) | 約7% | データ量が最も多く入る。工場内など汚れの心配が少ない環境向け |
| M(Medium) | 約15% | 標準的な設定。日常のポスターやパンフレットなどで広く利用される |
| Q(Quartile) | 約25% | 工場や運送ラベルなど、やや汚れやすい現場向け |
| H(High) | 約30% | 訂正能力が最も高い。過酷な産業環境や、一部に加工を施す場合向け |
よくある誤解:「30%の面積が壊れても必ず読める」わけではない
ここで多くの人が誤解しやすいのが、「レベルHなら、コード全体の30%の面積が欠けたり塗りつぶされたりしても絶対に読める」という解釈です。これは技術的に正確ではありません。
この「約7%」「約15%」「約25%」「約30%」という数値は、あくまで「コード全体の総コード語数(8ビット単位の塊)に対して、訂正可能な誤りコード語の割合の目安」を示したものです。幾何学的な「破損面積の割合」とは単純に一致しません。
なぜ面積と一致しないのか、それには明確な2つの理由があります。
- 訂正ブロックごとの許容限界:
QRコードのデータは、全体を1つの巨大な式で解くのではなく、処理負荷と信頼性のバランスを取るために複数の「訂正ブロック(RSブロック)」に分割されて格納されます。各ブロックにはそれぞれ独立して訂正できる上限数(訂正可能コード語数)が定められています。 たとえ全体の破損面積が小さくても、汚れや傷がたまたま特定の1つの訂正ブロックに集中してそのブロックの訂正限界を超えてしまうと、他のブロックが無傷であっても全体のデータは復元不能になります。規格ではブロック間でコード語を互い違いに並べるインターリーブ(分散配置)を行って局所的な傷の影響を和らげていますが、ブロックごとの限界そのものが消えるわけではありません。
- 機能領域が損なわれた場合の即死性:
リード・ソロモン符号による誤り訂正が機能するのは、あくまで「格子の位置が定まり、形式情報が解読された後」の符号化領域に対してのみです。もし三隅の位置検出パターンが破壊されたり、二重配置された形式情報の両方が完全に潰れてしまったりすると、カメラは格子の基準点やマスク番号を特定できず、誤り訂正計算を始めることすらできません。 この場合、破損面積がコード全体の1%にも満たない極めて小さな点火傷や穴であっても、コード全体が読み取り不能になることがあります。
ロゴやイラストを重ねる「デザインQRコード」のリスク
商業デザインなどで、QRコードの中央に企業のロゴマークやキャラクターのイラストを配置したものをよく見かけます。これは誤り訂正レベルをH(約30%)などに設定し、「ロゴで隠された部分をあらかじめ破損した誤りとしてリード・ソロモン符号に修復させる」という手法に基づいています。
しかし、この行為は「本来は予期せぬ汚れや傷に対処するための誤り訂正マージンを、意図的に最初から消費している」という状態であることを忘れてはなりません。
最初からロゴによって訂正能力の大部分を使い果たしてしまっているコードは、印刷のかすれ、屋外での泥はね、スマートフォンの影や光の反射、カメラのピンボケといった「追加の負荷」に対して極めて脆弱になります。「レベルHにしてロゴを重ねれば安心」という推奨は技術的には正しくありません。むしろレベルを上げると誤り訂正コード語が増えるため、同じ文字数でも全体のマス目(モジュール)が細かくなり、遠距離からの撮影や低解像度カメラでの読み取り難易度が上がるというデメリットも生じます。
また、一部で「外周に誤り訂正符号が配置されている」と説明されることがありますが、これも誤りです。誤り訂正コード語は符号化領域の内部にブロック単位でデータコード語とともに配置されており、外周に集められているわけではありません。
6. 安全に使うための技術的理解とよくある疑問
QRコードはその利便性から、Webサイトの誘導だけでなく、キャッシュレス決済、電子チケット、二段階認証の鍵共有など、金銭や個人情報に関わる重要な場面で利用されるようになりました。
ここで極めて重要なのは、「光学的・数学的に正しく読み取れること」と、「そのデータが安全で改ざんされていないこと」は全く別の問題であるという認識です。
QRコード自体にはセキュリティ機能がない
QRコードは、誰でも自由に生成でき、誰でも同じ規格で復号できるオープンな「データ記録方式(文字の入れ物)」に過ぎません。QRコードの標準規格自体には、データの暗号化、作成者の認証、改ざんを検知する電子署名などのセキュリティ機能は一切組み込まれていません。
そのため、白黒のマスがどれほど正確に読み取れたとしても、そこに書かれているURLや文字列が安全であるという保証はどこにもありません。
代表的な脅威と利用者の自衛策
QRコードを悪用した代表的な手口には、金融機関などを装った偽サイトへ誘導する「クイッシング(QRフィッシング)」や、店舗の決済用コードの上に偽コードを重ねる「ステッカーの貼り替え」があります。これらを防ぐため、利用者は以下の自衛策を意識する必要があります。
- 開く前に必ずURLを確認する:スマートフォンの画面に表示されるリンク先のドメイン名(例:
example.com)が正規のものか目視で確認してからアクセスします。 - 物理的な違和感を確認する:卓上プレートや掲示ポスターに、後からシールが重ね貼りされていないか確認します。
- 重要情報の入力は慎重に行う:開いたページでパスワードやクレジットカード番号を求められた場合は一旦立ち止まり、公式アプリや確実なブックマークからアクセスし直します。
決済や認証における多層運用の重要性
「QRコード決済は危険なのか」というと、必ずしもそうではありません。安全に運用されているQRコード決済システムでは、QRコード規格自体に頼るのではなく、上位システムによる多層防御を行っています。
例えば、表示されるコードに数分で失効する「ワンタイムトークン」を用い、通信経路をTLSで暗号化し、決済サーバー側で署名照合や不正検知を行います。このように、「コードは単なる文字列の伝達手段」と割り切り、安全性の担保は暗号化やサーバー認証が担う多層構造によって社会インフラとしての安全が成り立っています。
よくある質問(FAQ)
Q1: バーコード(JANコードなど)とQRコードの違いは何ですか? A: 最も大きな違いは「次元」と「情報量」、そして「誤り訂正の有無」です。従来のバーコードは横方向のみに情報を記録する1次元コードで数字13桁程度しか入りませんが、QRコードは縦横の2次元に記録するため数百倍の情報を格納できます。また、バーコードには誤り検出のチェックデジットしかありませんが、QRコードには欠けたデータを自力で復元するリード・ソロモン誤り訂正機能が組み込まれています。
Q2: スマートフォンの画面に表示されたQRコードが読み取りにくいのはなぜですか? A: ガラスの照明反射やバックライト輝度の不足によるコントラスト低下が主な原因です。また、画面更新のフリッカー(チラつき)がカメラのシャッター速度と干渉し、マスの境界が認識しにくくなることもあります。画面の明るさを上げ、反射を避ける角度でかざすと改善します。
Q3: 色付きのQRコードや、角が丸いデザインのコードも規格通り読めるのですか? A: 明暗比が十分にあれば読み取り可能です。カメラは画像を二値化して明暗差で判定するため、背景とモジュールの間に十分なコントラストがあれば黒と白以外の色でも認識されます。ただし、明暗比が不足する配色や、角を丸めすぎてモジュール面積が極端に狭まったデザインは、認識性能の低下を招くため注意が必要です。
おわりに
白と黒の小さなマス目が並ぶQRコード。その内部には、カメラが一瞬で位置を捉える幾何学的目印、撮影を安定させる白黒反転のマスク処理、多様なデータを凝縮する効率的なモード変換、そして破損や汚れから情報を守り抜くリード・ソロモン誤り訂正という、高度に洗練された工学の知恵が凝縮されています。
単なる「便利な記号」としてだけでなく、その仕組みと「オープンな入れ物に過ぎない」という技術的な限界を正しく知ることは、デジタル社会のツールをより安心・安全に活用していくための確かな力となるはずです。
出典・参考資料
- JIS X 0510:2018「情報技術―自動認識及びデータ取得技術―QRコード バーコードシンボル仕様」(日本産業標準調査会)
- デンソーウェーブ「QRコードドットコム」規格と特徴 (https://www.qrcode.com/en/about/standards.html)
- デンソーウェーブ「QRコードドットコム」誤り訂正機能 (https://www.qrcode.com/en/about/error_correction.html)
