QRコードのエンコーダ・デコーダは様々な言語で実装されたライブラリが数多く存在します。
ここではJavaとPythonで、任意のデータを格納するQRコード画像の作成と、QRコード画像からデータ読み取るプログラムの簡単な実装方法を紹介します。
QRコードの概要
QRコードについて簡単に説明します。
もう有名な話ですが、QRコードは、1994年にデンソー(現在はデンソーウェーブに分社)により開発されました。この仕様はオープンソースで公開されており現在は世界中に普及しています。
QRコードの姿は、最小で21×21から最大177×177の正方形の白黒のマス目(セル)パターンのマトリクスで表されます。3つの角の大きい二重の白黒正方形(位置検出パターン)が特徴的です。現在使われているQRコードのほとんどは、ゆがみの読み取りを強化したモデル2となっており、初期の規格であるモデル1は今は非推奨とされています。
バージョン
縦横セルのサイズを、最小の21から177までの間を4セル飛びの40段階にバージョン1~40に区切っています。大きいバージョンほど容量が大きくなり、数字のみの場合バージョン1は41桁、バージョン40で約7000桁です。格納できるデータの種類は、数字、英数字、バイナリデータ、漢字があり、それらを混在して格納できます。また、この種類の順で同じバージョン内で格納できる容量は少なくなります。
誤り訂正
QRコードは、画像の一部が破損したり欠けたりしていても読み取ることができる誤り訂正の機能があります。誤り訂正の精度は5レベルあり、
L(最低)、M、Q、H、S(最高)
高いレベルになるほど破損やゆがみに対する復元能力が高くなりますが、そのかわり同じバージョンで格納できるデータ量が減っていきます。最高レベルは当初Hまでの4段階でしたが、その上のSが加わり現在の規格は5段階となっています。ただし、本稿で紹介するPythonとjavaのライブラリでは4段階までのサポートとなっています。
主なバージョンとデータ容量の対応は次のようになっています。
Ver.
|
縦横数
|
数字
|
英字
|
バイナリ
|
日本語
|
1
|
21
|
41
|
25
|
17
|
10
|
2
|
25
|
77
|
47
|
32
|
20
|
3
|
29
|
127
|
77
|
53
|
32
|
4
|
33
|
187
|
114
|
78
|
48
|
5
|
37
|
255
|
154
|
106
|
65
|
7
|
45
|
370
|
224
|
154
|
95
|
10
|
55
|
652
|
395
|
271
|
167
|
15
|
77
|
1250
|
758
|
520
|
320
|
20
|
97
|
2061
|
1249
|
858
|
528
|
25
|
117
|
3057
|
1853
|
1273
|
784
|
30
|
137
|
4158
|
2520
|
732
|
1066
|
35
|
157
|
5529
|
3351
|
2303
|
1417
|
40
|
177
|
7089
|
4296
|
2953
|
1817
|
※誤り訂正は最低(L)で、各単一のデータ種のみとした場合。
詳しくはこちらを見てください。