QRコードとは? 汚れても読めるしくみ
QRコードは、白と黒の小さな四角を縦横に並べて、文字や数字を0と1で表すコードです。1994年に、自動車部品の管理のためにデンソーの開発部門(現在のデンソーウェーブ)で生まれました。データに「壊れた所を直すための予備の情報」を足してあるので、一部が汚れても元に戻して読めます。ただし、読めることと安全なことは別で、開く前にリンク先を確かめることが大切です。
この記事でわかること
- QRコードが生まれた理由と、規格のあらまし
- 3つの大きな四角など、決まった模様の役割
- 汚れても読める「誤り訂正」のしくみ
- スマホのカメラが読み取るまでの流れ
- QRコードを使った詐欺から身を守る方法
前提知識: 2進数(0と1だけで数を表す方法)。「コンピュータは0と1でどう計算するの?」で説明しています。
身近なところでは
お店でのスマホ決済、電車や飛行機の電子チケット、飲食店の注文、Wi-Fiの設定。どれも、スマホのカメラを向けるだけで、長い番号やWebページの住所が読み込まれます。
QRコードの中身は、ただの文字や数字の並びです。中身がWebページの住所なら、スマホはそのページを開こうとします。決済の番号なら、支払いの画面に進みます。何をするかを決めているのは、QRコードではなく、読み取ったアプリの側です。
QRコードはどこから来たのか
QRコードは1994年、自動車部品メーカーのデンソーの開発部門で生まれました。この部門は2001年に分かれて、今のデンソーウェーブになっています。開発を率いたのは原昌宏さんで、チームは2人で始まりました。
当時の工場では、部品の箱に付ける札(かんばん)にバーコードを使っていました。しかしバーコードは入る情報が少なく、1つの品物に何本も付けて読む必要がありました。そこで、多くの情報を速く読めて、汚れにも強いコードが求められたのです。
QRはQuick Response(素早い反応)の略で、速く読めることを目指した名前です。なお「QRコード」は、デンソーウェーブの登録商標です。一方で同社は、規格どおりのQRコードについて、持っている特許の権利を使わないと宣言しています。そのため、だれでも許可を取らずにQRコードを作って使えます。
QRコードの決まりは、1997年に自動認識の業界団体AIMの規格になりました。1999年には日本のJIS X 0510、2000年には国際規格のISO/IEC 18004になっています。ISO/IEC 18004はその後も改訂され、2026年10月時点の最新版は2024年版です。
しくみ1: 白と黒の四角が0と1を表す
QRコードを拡大すると、同じ大きさの小さな四角が、方眼紙のように並んでいます。この1マスをモジュールと呼びます。黒いモジュールが1、白いモジュールが0を表すのが基本です。
縦横に並ぶモジュールの数で、QRコードの大きさが決まります。この大きさの段階をバージョンと呼びます。いちばん小さいバージョン1は縦横21個ずつです。バージョンが1つ上がるごとに縦横4個ずつ増え、最大のバージョン40は177×177個になります。
入る量は、入れる文字の種類で変わります。数字は0〜9の10種類しかないので、3桁(1000通り)をまとめて10ビット(1024通り)で表せます。英字や漢字は種類が多いぶん、1文字に多くのビットを使います。最大のバージョン40に入る量は、次のとおりです(誤り訂正がいちばん弱いレベルLのとき。レベルは後で説明します)。
| 入れる文字 | 最大の文字数 |
|---|---|
| 数字だけ | 7,089桁 |
| 英数字(数字・英大文字・一部の記号) | 4,296字 |
| バイト(8ビットの値) | 2,953個 |
| 漢字 | 1,817字 |
日本語は、漢字用の書き方(漢字モード)で入れるか、バイトの並びとして入れます。漢字モードは、シフトJISという文字の表の番号を使います。どの文字の表で書いたかを読む側が取り違えると、文字化けが起きます。文字の表のしくみは「文字コードとは?」で説明しています。
しくみ2: 決まった模様は「読むための目印」
QRコードの模様は、すべてがデータではありません。読み取る機械のための目印が、決まった場所に置かれています。下の図で、⑤だけがデータを運ぶ部分で、ほかはすべて目印です。
- ① 位置検出パターン: 3つの角にある大きな四角です。コードがどこにあり、どちらを向き、どのくらいの大きさかを知らせます。英語ではファインダパターンと呼びます。
- ② タイミングパターン: 大きな四角どうしを結ぶ、白と黒が交互の列です。1マスの間隔を測る物差しの役目をします。
- ③ 位置合わせパターン: 小さな四角で、バージョン2以上にあります。斜めから撮ったときのゆがみを直す手がかりです。大きいバージョンほど数が増え、バージョン40では46個あります。
- ④ 形式情報: 誤り訂正の強さと、後で説明する「マスク」の番号が書かれています。読み取りに欠かせない部分なので、同じ内容が2か所にあります。
- ⑥ 余白(クワイエットゾーン): 周りに4モジュール分の何もない帯が必要です。周りの文字や絵とコードを区別するためです。
バージョン7以上には、バージョンの番号を書いた欄も加わります。図では省いています。
3つの大きな四角が「1:1:3:1:1」なわけ
位置検出パターンは、黒い枠・白い枠・黒い芯を重ねた形です。中心を通る線に沿って見ると、黒・白・黒・白・黒の幅が1:1:3:1:1になります。横でも縦でも斜めでも、中心を通っていればこの比は変わりません。
そのため、コードが回っていても、読み取る側は「この幅の比の並び」を探すだけで目印を見つけられます。デンソーウェーブによると、開発チームはチラシや雑誌、段ボール箱の印刷を調べました。そして、印刷物にいちばん現れにくい比として、1:1:3:1:1を選びました。周りに写真や文字があっても、目印を取り違えにくくするためです。
大きな四角が3つなのは、3つあれば向きが1つに決まるからです。四角のない角がどこかで、コードの右下がわかります。上下が逆さまに写っていても、正しい向きに戻して読めます。
しくみ3: 汚れても読める「誤り訂正」
QRコードには、データのほかに、壊れた部分を直すための予備の情報が足されています。汚れや傷で読み違えたモジュールがあっても、予備の情報から元のデータを計算し直せます。このしくみを誤り訂正と呼びます。
「CRCとは?」で説明したCRCは、誤りが「ある」ことを見つけるしくみでした。通信なら、見つけた後に送り直してもらえば済みます。ところが、印刷されたQRコードには、送り直しを頼む相手がいません。そこで、受け取った側だけで直せる方法を使います。この方法を前方誤り訂正(FEC)と呼びます。
QRコードでは、データを8ビットずつの塊に分けて扱います。この塊をコード語と呼びます。予備のコード語は、データのコード語から決まった計算で作ります。
その計算方法が、1960年にリードとソロモンが発表したリード・ソロモン符号です。QRコードのほか、CDやDVDでも傷による誤りを直すのに使われています。誤りを直せる符号をまとめて誤り訂正符号と呼び、リード・ソロモン符号はその代表の1つです。
4つの強さ(誤り訂正レベル)
QRコードを作る人は、予備の情報をどれだけ足すかを4段階から選べます。デンソーウェーブは、それぞれのレベルで直せる量を次のように示しています。
| レベル | 復元できる量(コード語の数で) |
|---|---|
| L | 約7% |
| M | 約15% |
| Q | 約25% |
| H | 約30% |
この割合は、紙の面積ではなく、コード語の数で数えたものです。1か所の汚れが2つのコード語にまたがることもあり、同社も「汚れ方によっては復元できない場合がある」と注意しています。また、①〜④の目印が汚れると、データが無事でも読めないことがあります。
リード・ソロモン符号を言葉で説明すると
リード・ソロモン符号は、データから「決まった規則に乗る予備の値」を作ります。受け取った側は、残った値が規則に合うように、壊れた値を逆算します。数式を使わずに、次のたとえで考えてみます。
たとえの中で、消えた場所がわかっているときは、予備の値1つで1つを直せました。どこが化けたかわからないときは、「どれが誤りか」も探す必要があるので、予備の値が2つ要ります。QRコードのレベルの割合は、場所がわからない誤りとして数えたものです。そのため、約30%を直すレベルHでは、全体の半分以上が予備の情報になります。
予備を増やすほど汚れに強くなりますが、同じ大きさに入るデータは減ります。例えばバージョン1に入る数字は、レベルLなら41桁、レベルHなら17桁です。デンソーウェーブによると、工場など汚れやすい所ではQやHが選ばれることがあります。
しくみ4: マスクで模様をならす
データをそのまま並べると、白ばかりや黒ばかりの大きな塊ができることがあります。塊が大きいと、マスの境目を数えにくくなります。位置検出パターンに似た模様が、偶然できてしまうこともあります。
そこで、データの部分に決まった模様を重ね、白と黒を入れ替えます。この模様をマスクと呼びます。重ね方は XOR という計算で、2つが同じなら0(白)、違えば1(黒)にします。
マスクの黒い所だけ、データの白黒が反転します。読む側が同じマスクをもう一度重ねると、反転が打ち消されて元に戻ります。XORの計算は、ビット演算の計算ツールでも試せます。
マスクの模様は8種類あります。作る側は8つ全部を試し、塊や紛らわしい模様が少ないものを点数で選びます。どれを使ったかは、④の形式情報に書いておきます。
スマホが読み取るまで
カメラを向けてから文字が出てくるまでに、スマホの中では次のことが順に行われています。細かい処理は省いて、流れだけを示します。
- 写真を撮る: カメラの部品(イメージセンサ)が、光の明るさを点ごとの数字にします(「イメージセンサとは?」)
- 白と黒に分ける: 明るさの境目を決めて、点ごとに白か黒かに分けます
- 3つの四角を探す: 1:1:3:1:1の並びを探し、コードの位置・向き・大きさを知ります
- ゆがみを直す: 斜めから撮ると、正方形が台形に写ります。四角と位置合わせパターンの位置から、正面から見た形に計算で直します
- マスを読む: タイミングパターンでマスの間隔を測り、1マスずつ0か1として読みます
- 形式情報を読む: 誤り訂正のレベルと、マスクの番号を知ります
- マスクを外す: 同じマスクを重ねて、元のデータに戻します
- 誤りを直す: リード・ソロモン符号で、汚れで化けたコード語を直します
- 文字に戻す: 書き方の種類(数字・英数字・バイト・漢字)の印と文字数を読み、文字に戻します
スマホでは、ここまでが一瞬で終わります。iPhoneのカメラなどは、読み取ったリンクをまず画面に表示し、タップしたときに開きます。この「開く前の一瞬」が、次に説明する詐欺を防ぐ大事な場面です。
QRコードを使った詐欺に気をつける
QRコードは、人の目では中身を読めません。この性質を悪用して、偽のWebサイトに誘う詐欺があります。本物の会社を装ってパスワードなどを盗む手口をフィッシングと呼びます。QRコードを使うものは、英語で「クイッシング(quishing)」とも呼ばれます。
日本のフィッシング対策協議会は2024年8月、注意を呼びかけました。カード会社を装ったメールのQRコードから、偽サイトに誘う手口についてです。IPA(情報処理推進機構)も、看板やチラシ、郵送物に有害なQRコードが見つかっていると説明しています。アメリカのFBIは2022年1月、本物のQRコードが偽物に差し替えられる手口を警告しました。
各機関の呼びかけをまとめると、次のとおりです。
- 開く前に、画面に表示されたURL(Webページの住所)を確かめる。1文字だけ違う偽の名前に注意する
- メールやSMSで届いたQRコードから、ログインしない。公式アプリや、登録しておいたブックマークから開く
- 街なかの貼り紙のQRコードは、上から別のシールが貼られていないかを見る
- 読み取った先でパスワードやカード番号を求められたら、いったん手を止める
ただし、URLを見ただけでは本物と言い切れないこともあります。フィッシング対策協議会も、URLの確認だけに頼るのでは被害を防ぎきれないとしています。公式アプリから開く習慣と、多要素認証(パスワードのほかにもう1つ確認する方法)を組み合わせるのが確実です。偽サイトと鍵マークの関係は「HTTPSの鍵マークは何を意味する?」で説明しています。
QRコードの仲間
マイクロQRコードは、位置検出パターンが1つだけの小さな版です。余白も2モジュール分で済むので、小さな部品などの狭い場所に印字できます。いちばん大きいM4でも17×17モジュールで、入る数字は35桁までです。
rMQRコードは、長方形のQRコードです。デンソーウェーブが開発し、2022年5月にISO/IEC 23941として国際規格になりました。細長い場所にも印字でき、最大の大きさ(17×139モジュール)で数字を361桁まで入れられます。
よくある誤解
誤解: みんなが作り続けると、QRコードはいつか足りなくなる
実際は、QRコードは電話番号のように配られる番号ではありません。中身の文字を、決まった規則で模様にしたものです。いちばん小さいバージョン1・レベルLでも、バイトを17個入れられます。1個が256通りなので、組み合わせは10の40乗通りをこえます。同じ内容のQRコードが何枚あっても困りません。
誤解: 真ん中のロゴは、QRコードに用意された「ロゴ用の場所」に置いてある
実際は、QRコードにロゴ用の場所はありません。ロゴで隠れたモジュールを、読むたびに誤り訂正で直しています。ただし、直せる量には限りがあります。3つの大きな四角や形式情報を隠すと、データが無事でも読めません。デンソーウェーブも、コードに文字や絵を重ねると読めなくなることがあると注意しています。ロゴを入れるなら誤り訂正のレベルを上げ、実際に何台かの機器で読めるか確かめるのが基本です。
誤解: ちゃんと読み取れたQRコードなら、中身も安全
実際は、「読めた」とわかるのは、模様から文字を正しく取り出せたことだけです。誤り訂正が守るのは汚れや傷による誤りで、作った人の悪意ではありません。偽サイトのURLを入れたQRコードも、きれいに読めます。安全かどうかは、読み取った後に開く先で判断します。
数字で見る
| 数字 | 何の数字か |
|---|---|
| 1994年 | QRコードが開発された年 |
| 2024年 | 今の国際規格 ISO/IEC 18004 の版(2026年10月時点) |
| 21×21 〜 177×177 | バージョン1からバージョン40までの、縦横のモジュール数 |
| 7,089桁 | バージョン40・レベルLに入る数字の最大の桁数 |
| 約7〜30% | 誤り訂正レベルLからHで復元できる、全体のコード語の割合 |
もっと詳しく学ぶ
- 用語の詳しい解説: 前方誤り訂正(FEC) / ECC(誤り訂正符号) / ハミング符号 / CRC(巡回冗長検査)
- 数字で試す: ハミング符号の計算ツール(誤りを直すいちばん簡単な符号) / CRC計算ツール(誤りを見つける符号)
- 関連する解説: 「CRCとは?」 / 「イメージセンサとは?」 / 「パスワードはなぜ破られる?」