分かると、実に、おもしろい! QRコードの仕組み
Post on:2022年9月29日
少しマニアックな知識、QRコードの仕組みを紹介します。
QRコード決済、リンクをQRコードで提供するなど、日常的に使用されているQRコードにあるそれぞれのパターンがどのように機能しているか、どういう役割をしているのか、なぜ上下逆さにしても読み取れるのか、なぜ一部が隠されても読み取れるのかなどが分かります。

QR codes
by Dan Hollick (@DanHollick)
下記は各ポイントを意訳したものです。
※当ブログでの翻訳記事は、元サイト様にライセンスを得て翻訳しています。
はじめに
QRコードがどのように機能しているのか、疑問に思ったことはありませんか?
控えめに言って、実に、おもしろい!
注意: この記事⬇では非常にマニアックな内容が含まれています。

QRコードの仕組み
QRコード(Quick Response code)は自動車部品メーカーであるデンソーの子会社によって、製造プロセスで部品を追跡するために考案されたものです。
それまで使用していたバーコードでは多くのデータを保存するためには大量のバーコードが必要であること、特定の角度にしないと読み取れないという問題がありました。

上: QRコード、下: バーコード
QRコードはそういった問題を解決し、さらに多くのことを可能にしました。

ファインダーパターン(Finder Patterns)
QRコードで最も特徴的なのはファインダーパターン(Finder Patterns)と呼ばれる四角形で、これはリーダーがコードを検出するのを助けるものです。
4番目の小さな四角形、アライメントパターン(Alignment Pattern)で、コードがどんな角度でもリーダーがどちらが上であるか判断できるようになっています。

タイミングパターン(Timing Pattern)
見落とされがちですが、すべてのQRコードにはタイミングパターン(Timing Pattern)と呼ばれる白と黒のドットが並んでいます。

タイミングパターン(Timing Pattern)
これらのドットは、単一のモジュールの大きさとQRコード全体の大きさ(バージョン)を伝えるものです。Version 1が最小の21x21セルで、Version 40が最大の177×177セルとなっています。

フォーマットに関する情報
QRコードのフォーマットに関する情報は、ファインダーパターンの近くにある2本のストリップに保存されています。
これは、QRコードの一部が見えなくても読み取れるように、2重に保存されています(繰り返しのパターンであることに気付くと思います)。

ストリップに含まれる3つの重要な情報
このストリップには、3つの重要な情報が格納されています。
- エラー訂正レベル
- マスクパターン
- エラー訂正フォーマット
これらはつまらなそうに見えるかもしれませんが、実はかなり興味深い存在です。

エラー訂正レベル
1つ目のエラー訂正レベルとは、何でしょうか。
エラー訂正レベルとは、コードの一部が欠落している場合でも読み取り可能な状態を維持するために、コードに格納される冗長な情報の量を決定するものです。

一部が隠されているQRコード(著者のサイトのURLが登録されています)
これは、かなりすごいことです!
コードの一部が欠落していても、より高い冗長レベルを選択して、隠れているデータを読み取れます。上記の一部が隠されているQRコードで試してみてください。

マスクパターン
2つ目のマスクパターンとは、何でしょうか。
QRコードのリーダーは、白い部分と黒い部分が同じ量なときに最適に機能します。しかし、データではうまく機能しないことがあるので、マスクを使って均一にします。

QRコードにマスクパターンを適用
マスクパターンがコードに適用されると、マスクの暗い部分に該当するものはすべて反転されます。
白い部分が黒くなり、黒い部分が白くなります。

マスクパターンは8種類
マスクには8つの標準パターンがあり、1つずつ適用されます。
最も良い結果が得られたパターンが使用され、その情報が保存されるため、リーダーはマスクの適用を解除できます。

QRコードのデータ部分
いよいよ実際のデータです。
不思議なことに、データは右下隅から始まり、上記のように巻き上がっています。QRコードはどの角度からでも読めるので、どこから始まるかは問題ではありません。

最初はモード、2番目はデータの長さ
最初の情報はデータがエンコードされたモードをリーダーに伝え、2番目の情報はデータの長さを伝えます。
各文字は8ビットのチャンク(バイトとも呼ばれます)で、24個あります。

データの後のスペース
データの後には、まだたくさんのスペースが残されています。ここにはエラー訂正情報が格納され、一部が見えなくても読み取ることができます。この仕組みは実はとても複雑なので、ここでは割愛させていただきます。
QRコードの基本的な解説は以上です。
終わりに
この記事にたどり着いた絶対的なオタクな人に、嬉しいニュースを一つ。
QRコードを発明したDenso Waveは、特許を行使せず、その技術を無償で公開しています!

【訳者注】
デンソーウェーブの最新読取技術を搭載したQRコードリーダーが無料でリリースされています。QRコードリーダーとして求められる機能が充実しています。
クルクル - QRコードリーダー
App Store, Google Playから利用でき、実際に試してみたところ、QRコードの高速読み取りがすごいです!
sponsors