ITエンジニアのための勉強会・イベントレポート情報メディア

QRコードは手作りできる?肉眼でも読み取れる?「QRコード手作り体験」のススメ
lifehack

QRコードは手作りできる?肉眼でも読み取れる?
「QRコード手作り体験」のススメ

2019.07.03

 
  • このエントリーをはてなブックマークに追加

手計算でQRコードを作る、
目と手計算でQRコードを読み取るのは
授業では格好の教材

QRコードを紙とペンで手書きする。あるいは紙とペンを使ってQRコードを解読する。そんな無駄なことをして何になると思われる方も多いだろう。しかし、何かの仕組みを理解するときは、手を動かしてみるのがいちばん早く、深く理解できる。最近では、決済にまで使われるようになったQRコード。その仕組みを体感しておくのは決して無駄にならない。

手計算でQRコードを作る、目と手計算でQRコードを読み取るというのはかなり面倒な作業だが、適切なワークシートを用意してあげれば不可能ではない。ワークショップや授業では格好の教材となるはずだ。

QRコードの基本仕様とは!?

まず、QRコードの基本仕様を確認しておこう。左上、左下、右上の3カ所にあるマークは、位置検出パターン。この3つがあるため、QRコードは斜めになっていても、逆さになっていても読み取ることができる。さらに、QRコードが、曲面に貼られて、歪んでいるような場合でも補正ができる。

位置検出パターンの間にある2カ所の「10101」はタイミングパターンと呼ばれる。これにより、QRコードの座標を確認する。

このような基準パターンをうまく使って、斜めになっていたり、歪んだりしているような場合にも読み取れる工夫をしている。

水色の部分は、形式情報が格納される領域で、誤り訂正レベルやマスクパターンの種別が指定されている。左上の14マス、左下+右上の14マスには同じ内容が記述される。残りの黄色い部分にデータが書き込まれている。



(QRコードの構造。3つのシンボルにより、QRコード全体が傾いたり、歪んだりしていても読み取りができる。データは黄色部分に格納されている)

誤り訂正レベルというのは、データに冗長性を持たせて、QRコードが汚れたり破損したりしても読めるようにするための工夫だ。実データと同じ内容を一定の算法で変換して格納し、冗長性を持たせている。誤り訂正レベルには4レベルあり、最低7%から最高30%までコードが読み取れなくても、データ読み取りを可能にする。一般的には15%の誤り訂正レベルを採用しているが、工場内などのタフな環境では最高の30%の訂正レベルが採用される(この場合は、誤り訂正符号が多くなり、QRコードのサイズが大きくなる)。



(QRコードのデータは誤り訂正符号という冗長データが付加されている。これにより、コードの一部が汚れていても、読み取りができる)

マスクパターンは、データの内容によって、0ばかり、1ばかりになるのを防ぐ仕組みだ。QRコードが白ばかり、黒ばかりになってしまうと読み取りが難しくなるので、なるべく白と黒が均等に現れるようにする工夫だ。一定のパターンで、指定されたドットの色を反転させる。マスクパターンは8種類用意されていて、どのパターンを使うのが最も優れているかが評価され、決定される。

手書きでQRコードを作ってみよう

こんなことを頭に入れて、手書きでQRコードを作ってみよう。ここでは、GEEKROIDという文字列をQRコード化させてみる。

先頭は、文字種と文字数を指定する。この場合英数字モードなので、規格表に従って0010で指定し、文字数は8文字なので、000001000(2進数で8)と指定する。合わせて、

0010 000001000

となる。この後に具体的なデータを加えていく。まず、GEEKROIDを数値化する。これは対応表に従う。単純に0から9までの数値はそのまま、Aが10、Bが11というものだ。

QRコードの英数字モードでは、2文字をひとつの単位として扱う。GEEKROIDであればGEが最初のデータ単位となる。最初のGを45倍して、Eに加え、これを11桁の2進数表記する。01011011110となる。

英数字モードでは、英数字と記号の45種類(2進数で6桁)の文字があるので、そのままだと、2文字を表すのに12桁が必要になる。最初の文字を45倍して合成することで、11桁に収めることができ、同じサイズのQRコードにより多くの情報を格納できるようになる。

これですべてを並べると、

0010 000001000 01011011110 01010001010 10011010111 01100110111

となる。

これをQRコードに記入していく場合は、右下から図のように、右左右左と上がっていき、上まで行ったら右左右左と下がってくる。これを繰り返していく。



(QRコードのデータは、右下から始まり、右左右左と上に上がっていく。上までいったら、右左右左と下がってくる)

データの後には、一定の算法で計算した誤り訂正符号をつけ、QRコード全体が埋まることになる。

最後に、最適なマスクパターンを適用し、指定ドットの白黒を反転させる。これでQRコードが完成する。

実際にワークショップなどの教材に使う場合、誤り訂正符号の計算が手計算では難しい。そこで、あらかじめQRコード作成ツールなどを使って出力したQRコードから、実データ部分だけを白抜きにしたワークシートを用意して、ここを手作業で埋めてもらうというような工夫をする必要がある。

既存のQRコードを目と手作業で読むのは
適切なQRコードを用意すれば
不可能ではない

一方で、既存のQRコードを目と手作業で読むのは、適切なQRコードを用意すれば不可能ではない。

まず見なければならないのは、形式情報領域(水色の部分)だ。15桁あるが、重要なのは最初の5桁で、残りの10桁は誤り訂正符号になっている。

最初の5桁を読むと、00 100となる。00が誤り訂正レベルがレベルM(15%まで損失OK)であることを示し、100がマスクパターンの100が採用されていることがわかる。

右下の4マスは、文字種の指定で、マスクパターンに注意して読むと0010となり、英数字モードであることがわかる。次の9マスは文字数の指定、その後の11マスごとに2文字ずつデータが記録されている。データが終わった後には、一定の方式で計算された訂正符号で埋めつくされている。



(簡単なものであれば、QRコードを目と手作業で読むことは不可能ではない。ただし、相当に面倒で、仕組みを理解するところから始めると、1日がかりの作業になる。QRコードを教材にしたワークショップや授業にちょうどいい教材となる)

QRコードの生成と読み取りは、実際にはかなり複雑で、すべてを手計算でやるのは難しい。特に訂正符号の計算は、電卓レベルを超えている。しかし、それ以外の部分は手作業でもなんとかなるので、フレームワークとなる教材を用意してやれば、中学生の情報科学系の部活動研究、高校生の情報科の授業や初級エンジニアのトレーニングなどに使っても面白いと思う。

QRコードの"授業案"

授業案としては、

(1)ツールで生成したQRコードから実データ部分だけを白抜きにしたワークシートを用意し、そこを手作業で埋めてもらう。

(2)簡単な内容のQRコードを生成しておき、手作業で読んでもらう。

であれば、2時間×3回程度で収まるのではないかと思う。その過程で、記数法、マスク、領域の節約手法、誤り訂正の仕組みなどの知識が身につき、さらに運用上の工夫を実感することができるはずだ。

身近になっている小さなQRコードの中に、これだけの知恵が込められることを知るのは、子どもたちや若いエンジニアにとって、貴重な経験となるはずだ。

なお、QRコードの仕様にはさまざまなルールがあるので、この記事の説明だけでは仕組みを理解するのは難しいかと思う。

キーエンスが公開している「よくわかる2次元コードの基本」、デンソーウェーブ公式のQRコード作成サイト「arara」などを、合わせて読みながら理解していただければ幸いだ。

原稿:牧野武文(まきの・たけふみ)

テクノロジーと生活の関係を考えるITジャーナリスト。著書に「Macの知恵の実」「ゼロからわかるインドの数学」「Googleの正体」「論語なう」「街角スローガンから見た中国人民の常識」「レトロハッカーズ」「横井軍平伝」など。

QRコードは手作りできる?肉眼でも読み取れる?「QRコード手作り体験」のススメ

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW