rMQRに対応したQRコード生成器を作った
みなさんはrMQRを知っていますか?
↓こんな感じの細長いQRコードで,2022年にISOに登録された新しいQRコードの規格です.
QRコードよりかわいくて使ってみたいと思ったのですが,新しい規格なだけあって,ほとんどのライブラリは対応しておらず,rustでは皆無だったので,今回作ってみることにしました.
Online Demo
wasm化したものを動かせるサイトを作ったのでよければ試してみてください.
ISO規格高すぎ問題
QRコードはガチガチに規格が決まっており,誤り訂正コード語数がいくつだとかがわかっていないと話にならない.通常のQRコードであれば,ネット上に規格のデータが無料で転がっているが,rMQRについては現状ISOから187CHF(約3万円)で規格書を購入するしかなく,あまり気軽に買える金額ではない.
どうしようかと思ったが,Pythonでライブラリを作っていらっしゃる偉大な先駆者様がいらっしゃったので,そこから拝借することにした.
rMQRについて
QRコードもrMQRもリードソロモン符号が使われており,これ以上効率的に誤り訂正符号化することはできないので,それ以外のところを削って符号語を小型化する必要がある.具体的には以下の通りである.
- QRでは3つあった位置検出パターンを2個に減らし,さらに一つは小型化した.
- QRではL,M,Q,Hと4種類あった,誤り訂正のレベルをM,Hの二種類に削った.
- QRではモードインジケータが4bitだったものを3bitに減らした
- QRではマスクパターンが8種類あったものを1種類にした.
上のような1bit単位の削減を行い,若干短くなっている.
また,細長いので試験管など曲面上に貼られることもおそらく想定されており,
- 周りをタイミングパターンで囲んでいる(マスクの種類を一種類にできたのもこのため)
- サイズの割には豊富なアライメントパターン
このような工夫がなされていて,曲面でも読み取りやすいように規格が設計されている.
ライブラリの作成
言語はrustを使用した.wasmやpythonで使いたかったので,c++かrustが選択肢だったが,最近の若者なので,c++の環境構築がそもそもできず,環境構築が簡単なrustを使用した.wasmに簡単にできるのもありがたい.
また先にも述べたが,符号化に関してはけっこう普通のQRコードと被っている部分が多く,コードが流用できるので,一からはつくらず,qrcode-rustを改造するという形で作った.
作成したライブラリ↓
よかったらスターとかして頂けると嬉しいです.
現状と課題
rMQRを作成することはできたが,読み取りは,qrqr等で読み取ることができるが,対応しているライブラリは少ない.
Discussion