ニュース

仕組みが分かれば、スマホなどいらぬ……ッ! 肉眼のみで解読するQRコード講座

必要なのは目という名のカメラ。それから、気合いと根性。

advertisement

 撮影することでURLなどを読み取れる正方形の模様、QRコード。スマホなどから利用するのが一般的ですが、どうしてもスマホが取り出せないときは、どうやって読み取ればいいのでしょうか。

 ご存じの通り、人間にも目というカメラがあります。実は文明の利器なんて使わなくても、人力で解読できるのです。それでは、QRコードリーダーをあなたの脳にもインストールしてみましょう。


今回はこのQRコードを自力で読んでみましょう(CMANで作成)

QRコードの基本構造を知ろう!


QRコードの構造。緑色部分は位置補正に必要なパターン、赤色部分はQRコードの読み取りに必要な情報(矢印の向きに読む)

 内容を読み取る前に、そのための準備作業から始めましょう。

advertisement

 まず着目してもらいたいのが、QRコードの隅などにある四角形の模様です。これはカメラで読み取ったときの角度の違いを補正するためのもの。これ自体は読む必要がありませんが、周辺に重要なフォーマット情報として「誤り訂正レベル」「コード全体に施されたマスク」が書かれています。

 誤り訂正レベルというのは、コードの読み取りミスを訂正する能力のことで、4段階に設定可能。レベルが高いほど読み取りの精度が悪くても(例えばQRコードの大部分が見えなくても)正しく読み取りが行えますが、その分データ量(追加する誤り訂正符号の数)が増え、コードが大きくなります


同じ内容のQRコードを誤り訂正レベル最低(左)、最高(右)で書き分けるとこんな感じに。両方とも青い丸で一部隠れてしまっていますが、右のものなら問題なく内容が読み取れます

 マスクというのは、QRコードの黒と白をバランス良く配置するための加工のことで、8種類存在します。やたらと黒(もしくは白)が多いQRコードを見掛けないのは、このマスクのおかげです。

 今回使用するQRコードのフォーマット情報は15マスにわたって書かれています(2カ所ありますが、どちらも内容は同じ)。黒いマスを1、白いマスを0とすると「111110110101010」になります。

 ここには「101010000010010」というマスクが掛かっています。対応するマスクの数字が「1」のときは「0」に、「0」のときは「1」に反転させると、正しい情報が読み取れます。

advertisement
  • 111110110101010(書かれているフォーマット情報)
  • 101010000010010(マスク)
  • 010100110111000(マスクを掛ける前の、元の情報)

 人間にはちょっと大変な作業かもしれませんが、実は誤り訂正レベルは最初の2マス、コード全体に施されたマスクの種類は次の3マスで表されており、以降の10マスは、読み取りが間違っていないか調べるための「誤り訂正符号」が書かれているだけ。今回は、読まなくて大丈夫です。


「j」は一番左の列を0とした時の列番号、「i」は一番上の行を行番号。これらを代入した式がマスクの条件として使われます

 対応表を参照すると、このQRコードの誤り訂正レベル「01」は「L(約7%の誤りまで訂正可能)」、マスクの種類「010」は「j mod 3 = 0」を指すことが分かります。

 さて、「j mod 3 = 0」という式は何でしょうか……。何やら難解ですが、この「j」は一番左の列を0としたときの列の番号を表し、「mod 3」は3で割った余りを表しています。そこで、このマスクの意味は「3で割ると0になる列番号のとき(18や21、24など)、マスの数字を反転させる」ということになります。


QRコード右下部分の拡大画像。マスクが施される列を青くしています。読まない領域(先ほどの画像の赤や緑の部分)に当たってしまったら、無視して次のマスに移ります

QRコード解読は、気合いだ!

 いよいよ実際に内容を読む段階に入ります。

 QRコードは右下から、しかもジグザグに書かれています。例えば、1マス目は一番右下にありますが、2マス目はその左隣。そして、3マス目は1マス目の上にあります。このため、目の動きは左、右斜め上、左、右斜め上……という感じ。普通の文章を読むときとは、かなり違いますね。

advertisement

2列まとめてジグザグと上に読んでいき、終わったら次の2列を下に向かって読んでいきます

 1~4マス目には、読み取った数字を文字などに変換するためのルールが書かれています。今回は「0100」で、「8ビットバイトモード」という形式で記録されていることが分かります。

 8ビットモードでサイズが25マス×25マスの場合(今回のQRコードが該当)、次の8マスには記録されている文字数が記載。そこから先が実際のデータ内容で、8マスずつ区切って読み取った2進数を、対応表を使いながら文字に置き換えていきます


文字と数字の対応関係を一部抜粋。数字は2進数から、16進数に置き換えられています

 実際に右下から読んでいくと次のようになります。

  • 0100=データモード(8ビットバイト)
  • 00011100=文字数(28文字)
  • 01101000(68/2進数→16進数に変換したもの)=h
  • 01110100(74)=t
  • 01110100(74)=t
  • 01110000(70)=p
  • 01110011(73)=s
  • 00111010(3A)=:
  • 00101111(2F)=/
  • 00101111(2F)=/

 ……「https://」と、それっぽい文字列が見えてきましたね。

 このQRコードは28文字。こんな感じで数字を読んでは表とにらめっこして、対応する文字を見つける作業を28回繰り返すと読解完了です。ちなみに、図面の左半分は読まないまま終わってしまいますが、これは読み取りミスを確認するためのデータが配置されているためです。

advertisement

 さて、QRコードを人力で読む方法を解説してきましたが、難点をあえて1つだけ挙げるなら、これだと思います。

 「とにかく面倒くさい」。

 白黒の模様を2進数として読み取る作業自体はかなり単純なものですが、量が量なので簡単ではありません。しかも、その数字を文字などに変換するための対応表を丸暗記する苦労なんて、想像すらできません。こんな大変なことを一瞬でやってくれるスマホって、やっぱり便利ですよねえ……。

 ただ、暗号を解読するような面白さもあるので、パズルなどが好きな人は楽しめるかもしれません。レッツ・チャレンジ!

制作協力

QuizKnock

Copyright © ITmedia, Inc. All Rights Reserved.

記事ランキング

  1. 「何言ったんだ」 大谷翔平が妻から受けた“まさかの行動”に「世界中で真美子さんだけ」「可愛すぎて草」【大谷翔平激動の2024年 「家族愛」にも集まった注目】
  2. 「庶民的すぎる」「明日買おう」 大谷翔平の妻・真美子さんが客席で食べていた? 「のど飴」が話題に
  3. 60代女性「15年通った美容師に文句を言われ……」 悩める依頼者をプロが大変身させた結末に驚きと称賛「めっちゃ若返って見える!」
  4. 皇后さま、「菊のティアラ」に注目集まる 天皇陛下のネクタイと合わせたコーデも……【宮内庁インスタ振り返り】
  5. 71歳母「若いころは沢山の男性の誘いを断った」 信じられない娘だったけど…… 当時の姿に仰天「マジで美しい」【フィリピン】
  6. 新1000円札を300枚両替→よく見たら…… 激レアな“不良品”に驚がく 「初めて見た」「こんなのあるんだ」
  7. 藤本美貴、晩ご飯に手料理7品 多忙でも野菜とお肉たっぷりで反響 「お疲れ様です」「凄く親近感」【2024年の弁当・料理まとめ】
  8. 家の壁に“ポケモン”を描きはじめて、半年後…… ついに完成した“愛あふれる作品”に「最高」と反響
  9. 真っ黒な“極太毛糸”をダイナミックに編み続けたら…… 予想外の完成品に驚きの声【スコットランド】
  10. 「ほぼ全員、父親が大物芸能人」 奇跡的な“若手俳優の集合写真”が「すごいメンツ」と再び話題 「今や全員主役級」