QRコードの仕組み

別名: QRコードのエンコード, QRコードのデコード, QRコードの読み取り原理

定義

QRコードは、データをコード語に変換し、リード・ソロモン符号による誤り訂正を加え、カメラが見つけて補正し読み取るための固定パターンの周囲に、ビットをマス目状に配置して作られます。

データからパターンへ

QRコードを作るには、まずデータに合ったエンコードモード(数字、英数字、バイト、漢字)を選びます。エンコーダーはデータをビットに変換して8ビットのコード語に分け、選んだレベルのリード・ソロモン誤り訂正コード語を加えます。そのうえで、収まる最小の型番を選びます。

コード語は、固定パターンを避けながらジグザグの経路でマス目に並べられます。最後にエンコーダーが8種類のマスクパターンのうち1つを適用し、大きな空白領域や紛らわしい形を崩します。使ったマスクと誤り訂正レベルは、形式情報に記録されます。

  • エンコードモードを選ぶ
  • データをエンコードし、誤り訂正コード語を加える
  • 型番(サイズ)を決める
  • ファインダー、タイミング、アライメントの各パターンを配置する
  • データモジュールを埋める
  • 8種類のマスクから最適なものを適用し、形式情報を書き込む

カメラ画像からデータへ

デコードは、同じ手順を逆にたどります。スキャナーは、明暗の比が1:1:3:1:1というほかの画像にはあまり現れない特徴を持つ3つのファインダーパターンを見つけ、それとタイミングパターン、アライメントパターンを使ってマス目を割り出します。次に形式情報を読み取り、マスクを外して、コード語を集めます。

続いてリード・ソロモン復号によって、誤って読み取ったコード語を、誤り訂正レベルの限界まで修復します。損傷が多すぎる場合は、間違ったデータを返さずに読み取りに失敗します。QRコードが文字化けした結果を返すことがほとんどないのは、このためです。

サイズとコントラストが重要な理由

どの工程も、カメラが暗いモジュールと明るいモジュールを見分けられることを前提にしています。モジュールが小さい、コントラストが低い、光が反射している、ぼやけている、クワイエットゾーンがないといった状態では、判断に迷うモジュールが増え、誤り訂正が吸収できる量にも限りがあります。データを短くし、コントラストを強くし、余白を確保すれば、デコーダーの負担を最小限にできます。

よくある質問

スマートフォンは、QRコードの位置をどうやって知るのですか?

隅にある3つの大きな四角形、ファインダーパターンを探します。1:1:3:1:1という独特の比率のおかげで、どんな角度からでも見つけられ、向きも割り出せます。

QRコードにマスクパターンがあるのはなぜですか?

マスクは決まったパターンでモジュールを反転させ、大きなベタ塗りの領域や、ファインダーパターンに似た形が現れないようにします。エンコーダーは8種類のマスクをすべて試し、最も確実に読み取れるものを選びます。

QRコードは逆さまでも読み取れますか?

はい。ファインダーパターンからスキャナーが向きを判断できるので、QRコードはどの角度に回転していても読み取れます。

出典と規格

すべての用語