ナガモト の blog

Full Cycle Developerを目指すエンジニアが有用そうな技術記事や、ポエムのようなよしなしごとを投稿するブログです。

「QRコード完全に理解した」ので要点まとめ

QRコード非常に便利ですよね。しかし、便利かつ適度にブラックボックス化されているがために理解が乏しいまま使っていないでしょうか。 私は先日「QRコード完全に理解した」ので、エンジニアとしてQRコードを使う上で知っておきたいことをまとめました。

表現できる最大容量は?

QRコード - Wikipediaより引用します。

種類 最大容量
数字のみ 7089文字
英数 4296文字
バイナリ 2953バイト
漢字・かな(Shift_JIS) 1817文字

これはQRコードのバージョンを最大の40。誤り訂正レベルを最低のLにした場合です。

バージョンと誤り訂正レベルに関しては後述します。

種類によって異なりますが、基本的にデータは01で表されるため、1文字1バイトの文字と1文字3バイトの文字とでは3倍の文字数の差がでるというだけです。1文字あたりのバイト数節約という点でUTF-8よりもShift_JISの方が文字数を多く含めることができるため、QRコードで表現する際には便利と言えます。

バージョンとは?

バージョン毎にセルの数が決まっており、バージョン1(セル 21 * 21)からバージョン40(セル 177 * 177)まであります。

バージョン≒QRコードの大きさ≒最大容量

くらいの認識でいいでしょう。

誤り訂正レベルとは?

QRコードの情報を100%正しく読み込むことは難しいですが、ある程度誤っていても復元できるよう、QRコードには誤り訂正の仕組みが組み込んであります。表現したい情報とその情報を元に作成した誤り訂正符号をQRコードに含むことで、誤りを検出・訂正します。 *1

手ブレしているスマートフォンでもQRコードをスムーズに読み込めるのは誤り訂正符号のおかげです。*2

そして誤り訂正レベルは復元できる情報量(の割合)を表します。レベルにはL~Sが存在し、7~50%の情報が復元可能です。誤り訂正レベルを高くすればそれだけ多くの誤り訂正符号が必要になるため、容量が小さくなることは覚えておきましょう。

便利なQRコード作成サイト

QRコード(二次元バーコード)作成【無料】

このサイトだけでもとりあえずQRコードを作ったり、試すことが十分に可能です。どの程度の文字数でどれくらいの大きさのQRになるのか、読み取り精度・速度は十分か、誤り訂正レベルはどれが良いか簡単に検証できるでしょう。

QRコード作成| Softel labs

このサイトでは文字コードによるQRコードの変化(密度・大小)を検証できます。試しに平仮名51音をQRにした結果が次の通りです。

f:id:ngmt83:20190419190315p:plainf:id:ngmt83:20190419190259p:plain
UTF-8←→Shift_JIS

UTF-8の方が密度が濃いことがみて取れます。*3平仮名51音の場合においてはShift_JISのほうがバージョンが低く、小さくても多くの情報を表現できることがわかります。

まとめ

  • バージョン(QRの大きさ)と誤り訂正のレベルでQRに格納できる情報量が変動する
  • 文字を格納する場合は種類(文字コードなど)によって文字数が変動する

豆知識

QRコードを開発したのは現在のデンソーウェーブです。特許権を行使しないと宣言しているそうです。素晴らしいです。

今では世界で使用される日本発の誇れる規格ですね!

*1:詳しく知りたければもっともシンプルな誤り訂正符号パリティビットについて調べることをおすすめします

*2:誤り訂正符号は通信時のパケットにも同じように含まれていてなくてはならないものです。

*3:4.2 Alignmentの数がバージョンの目安になります。

f:id:ngmt83:20190419190638p:plain
wikipediaより

https://ja.wikipedia.org/wiki/QR%E3%82%B3%E3%83%BC%E3%83%89より引用