QRコードの誤り訂正レベルの判別方法~アイカツスターズ!のQRコードを分析してみる
Posted on 2016年4月29日(金) 23:22
(分析ってほどのことはしませんが、既に生成済みのQRコードの誤り訂正レベルはどれなんだろう? って思った時に調べる方法についての記事が意外となかったので)
バンダイにものすごい売上をもたらしたアイカツ!~アイドルカツドウ~ がアニメも終わって、ゲームも稼働終了となり、アイカツスターズ!という新しい展開にするそうです。
アイカツカードといえば裏面のバーコードを読み取る形式だったので、ものすごい種類(2500種類くらい?)を捌ききれるのかと検証してみましたが、全然余裕でしたというのがその時の結論。
ちょうどプロモーションカードを配布していたので、娘のために貰ってきました。
このカードはプロモーション用なので普通の印刷ですが、筐体から排出されるカードはオンデマンド印刷に変わります。
というわけで、裏面にあったバーコードが表面のQRコードに変わりました。
実は今主流の形式ですね。
というか、「妖怪ウォッチともだちウキウキペディア」が既に同じ形式なので新しくもなんともありません。
こうやって写真撮ってしまうと、QRコードも利用できてしまうのが困る。
以前はカードしか挿入できなかったので、一旦紙に印刷しないとスキャンできませんでしたが、今回は筐体のCMOSカメラに見せる形式のようなので写真撮影→スマホ画面でも認識するでしょう。
なので、一応QRコードをボカしました。
前回同様、どのくらいのコードが入っているのか見てみますかね・・・。
別にセル数変えられるからいくらでも拡張できちゃうんだろうけど。
まず、QRコードリーダーで読み込んでみると、「http://dcd.sc/」で始まるURL形式で84文字のデータになっています。カードの固有情報と思われる部分はそのうち65バイトかな?
URLには記号も含まれているのでQRコード的にはバイナリ扱いになります。
セルのサイズから、バージョンは8です。
あと、QRコードには誤り訂正レベルというのが4種類(L,M,Q,H)があり、Hが最も復元しやすく、Lが最もデータ量が多くなります。
誤り訂正レベルは何使ってるんですかね。(84byteは一番誤り生成レベルが高いHでちょうど入るのでおそらくHなんでしょうけど、一応確認します)
下の画像は、上のカードのQRコードの左上を拡大したものです。
赤枠の部分は、タイミングパターンというもので、必ず白と黒の交互のパターンになっています。
他の部分のセルを切り出すときのヒントになるマーカーみたいなものですね。
青枠の部分が形式情報を保存している部分です。
15bitあります。なお、この位置以外にも、右上と左下の検出シンボルにも分割して同じ情報が入っています。(汚れや隠れに対応するためと思います)
この0~14の部分を、白を0,黒を1として読み取ると、
001110011100111
になります。(この数字の左端が上位ビットなので=画像の14の位置です)
この15bitのうち、最初の2bitが誤り訂正レベルを示しています。
ただし、同じビットが続くと読み取り精度に悪影響を与えるため、101010000010010でXORをとってあります。
といわけで、もう一度XORをかけて元に戻すと、
100100011110101
になります。
最初の2bitは10ですね。
誤り訂正レベルは以下のように定義されていますので、このコードの誤り訂正レベルはHということになります。
誤り訂正レベル一覧:
L 01
M 00
Q 11
H 10
もう少し、実用的にまとめると、上の画像の14と13の部分を見て、
□□(白,白)だったら、誤り訂正レベルH
□■(白,黒)だったら、誤り訂正レベルQ
■□(黒,白)だったら、誤り訂正レベルM
■■(黒,黒)だったら、誤り訂正レベルL
です。
というわけですので、セルサイズが変わらないという前提で言えば、コーデ(衣装)カードは84byteのURL形式が固有IDとして割当られるようです。
旧アイカツカードにも実はQRコードも併記されているんですが、こちらはもっとコード量が少ないです。
更にURLが「http://aikatsu.com/」になっているので、固有コードはもっと短いです。
旧アイカツカードの裏のQRコードの誤り訂正レベルはL(7%復元)、バージョン4だったのに対して、アイカツスターズのQRコードは最も誤り訂正レベルの高いレベルH(30%復元)、バージョンは8になっていますね。オンデマンド印刷での品質を考慮した結果でしょうか。
ところで、Webにある、QRコード生成サイトで、同じURLのQRコードを同じバージョンと誤り訂正レベルで作ってみても、QRコードが同じになりません。
同じになる場合もあるんですが、QRコード生成時に、いまいち規格上固定されない部分や、規格の年式による微妙な違いがあり、実装により変わるみたいです。
アイカツスターズの筐体が、この部分の違いまで見極めて勝手に作ったQRコードを不正なカードと判断するかするかどうかは・・・まぁ、しないでしょうね。
なお、ライバル機である、プリパラのQRコードは白黒反転されております。
これはデータの保護というよりは、デザイン面での配慮な気がします。