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

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

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

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

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

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

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

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

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

111110110101010（書かれているフォーマット情報）

101010000010010（マスク）

010100110111000（マスクを掛ける前の、元の情報）

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

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

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

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

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

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回繰り返すと読解完了です。ちなみに、図面の左半分は読まないまま終わってしまいますが、これは読み取りミスを確認するためのデータが配置されているためです。

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

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

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

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

制作協力 QuizKnock

