IT

QRコードを目で読む

QRコード便利ですよね。普段サクッとスマホで読み取りしているQRコードですが、実は人力でも読むことができます。わかりやすいサイトがなかったので、個人的にまとめることにしました。どこよりも分かりやすくを目指すので、興味がある人はぜひ見て行ってください。

QRコードを目で見て読んでみたいのですけど
どうしたらいいですか?

ぴよ子
うさ先生

面白いことを思いつくね
基本的にQRコードは暗号化されていないから
簡単なQRコードだったら、頑張れば読むことができるよ

本当ですか!?
簡単な例で良いので教えてほしいです

ぴよ子
うさ先生

じゃあ、例を出すから一緒に順を追って見ていこうか

QRコードとは?

QRコード概要

QRコード®は、デンソーウェーブが1994年に開発した2次元コードです。思っていたより昔からあるんですね。

1次元のバーコードより、当然多くの情報を組み込むことができます。

それを利用し、一部が破損しても問題ないほどの情報を入れることができます。

スマホ決済によく使われていますね。PayPay あたりは多くの人が1度は使ったことがあると思います。

QRコードの構成

以下でQRがどう成り立っているかを簡単に説明します。1個1個の小さい点々の領域を「セル」といいます。

ファインダパターン

QRコード ファインダパターン

QRコード自体の位置を把握しやすいようにする領域です。

どの方向からどう見るか?というのが、機械側で誤りがないようにするための固定領域です。

タイミングパターン

QRコード タイミングパターン

黒と白のセルが交互に現れる領域です。

これもQRコード自体の読み取りについて、誤りを少なくするためにある領域です。

フォーマット情報

QRコード フォーマット情報

読み取るための情報が埋め込まれている領域です。

間で2セル分、先程説明したタイミングパターン部分はスキップしています。

データ部分がどのように変換されているかの情報を含みます。今回はこの部分を使用します。

フォーマット情報(予備)

QRコード フォーマット情報予備

先に説明したフォーマット情報部分の予備です。

先程のフォーマット情報と同じデータが組み込まれています。

矢印に沿って読み取ると、先に説明したフォーマット情報と同じ白黒状態ですね。

クワイエットゾーン

QRコード クワイエットゾーン

簡単に言えば余白です。4セルほどあける必要があります。

QRコードを目で!いざ読み取り!

それでは、いよいよQRコードを読み取ってみましょう!

読み取るために最低限必要な情報に絞り、ステップ・バイ・ステップで解説していきます。

マスク情報

セルの読み取り

まずはマスク情報を見てみましょう。マスク情報は以下の3セル部分に埋め込まれています。

QRコード マスク情報

全部黒塗りですね。つまり、111 となります。

マスク情報を求める

この 111 と (予め決まった値の) 101 の XOR を計算します。そうすると 010 となります。

XOR とは?

排他的論理和と呼ばれています。exclusive or の略語です。お互い同じ(0 同士か 1 同士)であれば 0 、違う場合は 1 になります。

値1値2XOR
000
011
101
110

010 と計算できましたね。この 010 とは何なのか?

どの反転パターンか調べる

下記のパターンを参考に、 010 の反転パターンで反転処理をしてくださいという意味になります。

QRコード自体の(ファインダパターンを含めた)一番左上の部分からこの反転パターンを適用します。

QRコード マスクパターン

なぜこんな面倒なことをするかというと、白塗りや黒塗りが広い部分を回避するためです。適度に白と黒を散らせることにより、読み込みエラーを防ぎます。

今回は 010 です。つまり、下記部分を反転させて解読してくださいということになります。

分かりやすさのために全体を赤くしています。ファインダパターンやフォーマット情報には反転マスクは影響しません。

QRコード マスク部分参照

では続けて読んでいきましょう。

モード判定

まずは下記の赤部分を見てみます。この部分でモード(数字だけか英数字も使うか等々…)がわかります。

モード一覧

モード数値
数字0001
英字・記号0010
バイナリ(8bit)0100
漢字1000

モード判定

上記画像の数字、1→2→3→4 の順番で読みます。

そうすると、

白→黒→白→白

となるので、

0100

となります。

つまり、今回は

バイナリ(8bit) モード

が使用されていることがわかります

文字数判定

次に読む場所は下記赤色の文字数部分です。

文字数

数字が書いてある順番に読みます。

白→白→白→白→白→黒→黒→黒

となるので、

00000111

となります。

2進数の 111 は 10進数に直すと 7 です。つまり、このQRコードには

7 文字含まれている

と分かります。

文字の読み取り

文字の読み取りの際に必要な一覧表をここに書いておきます。

※今回最低限必要な英小文字の一覧表です

英小文字ASCIIコード (2進数)
a01100001
b01100010
c01100011
d01100100
e01100101
f01100110
g01100111
h01101000
i01101001
j01101010
k01101011
l01101100
m01101101
n01101110
o01101111
p01110000
q01110001
r01110010
s01110011
t01110100
u01110101
v01110110
w01110111
x01111000
y01111001
z01111010

1文字目

いざ、実際に文字の読み取りです!

今回1文字は8セルずつ情報が入っているので、1文字目は下記の8セルから読み取ります。

白黒がどうなっているのか見てみましょう。

1文字目

1白→2黒→3黒→4白→5白→6黒→7白→8白

となります。つまり、

01100100

ですね。これは一覧表から d にあたります。

1文字目は

d

と分かりました。

2文字目

では2文字目です。2文字目も8セル分に情報が詰まっているのですが、フォーマット情報にぶつかってしまいます。そういう場合、そのまま左へ移動し、ターンするよう折り返して流して読んでいきます。

2文字目

さて、純粋に読むと

1白→2黒→3黒→4白→5黒→6白→7黒→8黒

となっています。しかし、5 と 7 の部分は反転する領域の中にあります。

つまり、反転領域を反転させて読んだ

1白→2黒→3黒→4白→5→6白→7→8黒

が正解です。

01100001

となります。

一覧表より、2文字目は

a

と分かりました。

3文字目

この先は、これまでと同様に反転部分に気をつけながら読み解いて行くだけです。

3文字目

まずそのままの色を読んでみます。

1黒→2黒→3白→4黒→5白→6白→7黒→8黒

となります。今回は 1,3,5,7 部分が反転ですね。

ではその部分を反転して

1→2黒→3→4黒→5→6白→7→8黒

が正解です。つまり、

01111001

となり、これは表から

y

と分かりました。

4文字目 ~

4文字目以降も同様に読み解いていくだけですので、割愛します。

実際に読んで1文字目から通して見ると

daylife

と文字データがあることが分かります。

人力QRコード

仕組みさえ分かってしまえば、無理に機械で作成せず、下記のように人の手で書いてそれを読むこともできます。

ただ、当然マスク処理のパターンや、それに伴う反転も考慮して作成しなければいけないので相当手間はかかります。

まとめ

まとめ

今回はQRコードの読み方を紹介しました。機械がない状態でQRコードを読み取る必要があることは、そうそう機会はないと思いますが、流行りのものの仕組みを知っておくのは面白いですよね。目でQRコードをを読み取れると言うと、1つの話のタネになるのではないでしょうか。

-IT
-, ,