QRコードについては以下
前回は、QRコードを読み取るため、QRコードの仕組みを解説してみました。
今回は、そのQRコードを生成してみます
車検証の普通車の車検証の場合は、分割(連結)QRコードと言う仕様となっており、軽自動車および軽自動車ICカードの車検証は、通常のQRコードという仕様です。
QRコードはデンソーウェーブの登録商標です
QRコードの仕様は公開されているものの、分割QRコードがあまり利用されていないようで、QRコード生成ライブラリも分割でないQRコード生成はたくさんありますが分割できるものが有りませんでした。
そこで、zxingライブラリのjsバージョンを元に分割QRコードを生成できるようにカスタマイズしました。
車検証QRコード生成ツールは、githubにてソースコードおよびwebとしても公開してます。
動作URL(実際に動くものを確認できます)
github
またテストしやすいようにGoogle Spreadsheetを用意し、データを管理可能としています。今回は、ナンバープレートの情報と初度登録年月、型式指定番号、類別区分番号のみ書き換えできるようにしています。
B列:車種「普通自動車」 ・「軽自動車」のどちらか選択
C列:ナンバープレート情報
D列:初度登録年月 年2桁、月2桁の4桁
E列:型式指定番号
F列:類別区分番号
*Google Apps Scriptにて、列番号固定してます
コード解説
ZXing-js libraryの改修
ZXingが更新されなくなっていたので、forkして改修していこうかと思いましたが、とりあえず急ぎで対応が必要だったのもあって、buildした1つのjsファイルを色々いじってみました。
分割QRコードについては以下を参考にさせていただいています。
const headerBits = new BitArray();
// Add code page info
const tmpbyte = 0x3; // 分割QRコードであることを示す 0x3
headerBits.appendBits(tmpbyte, 4);
headerBits.appendBits(page, 4); // 分割されたページ番号 0スタート
headerBits.appendBits(total_page - 1, 4); // 最大pege番号(分割数 -1)
headerBits.appendBits((parity&0xf0)>>4, 4); // parityの上位4bit
headerBits.appendBits(parity&0x0f, 4); // parityの下位4bit
もともと「headerBits」を定義していましたが、何もセットされていなかった、というのもあって、エンコード時の処理に上記のみです。
その他、引数で、分割数や分割位置を渡せるように改修したのみです。
google apps scriptによるデータ取得について
もっと便利に利用したいというところから、Google Spreadsheetにデータを置いておき、そのデータを取得する仕組みを作りました。
こちらは、google apps scriptで実現できます。
google apps script(GAS)は、ExcelでいうところのVBAですが、オンライン上に存在することからデプロイという作業で、WEBアクセスができます。API化できるということです。(いろんな用途でも使えそうですね)
こちらはgitに配置しています。googlespreadsheet.gs
ウェブアプリとしてデプロイすれば参照できます。
githubで公開しているので、ご利用ください。
また、ここちょっとおかしいよ、こうしたほうがいいよとか、アドバイスもいただけますと幸いです。