Redditで読めないQRコードを見つけた。

解読できたので報告しようかと思ったら、ログインしても書き込み権限が無かった。しかも既に8か月前の投稿なので、今更感がすごい。が、ここの人たちは読めなかったっぽいので、読み方の解説だけでもまとめておく。
解読

既にここまでできてたのでこの画像から始める。ここまでの過程が正しいのかは確認してないが、まぁええやろ。
ここまで来てるのであればパディング領域がどこにあるかはわかる。

パディング領域には(EC11)16が入る決まりなので入れる。

これに誤り訂正処理をかけてみると完全復元できたのでこれで完了。

元のを作った人は文字数数え間違えてる気がする。インターリーブされてるから間違えやすい。
インターリーブ(分散配置)
QRコードでは8bitの情報を1ブロックとして扱うが、それが一塊として記述されるとは限らない。例えば1文字目"h"(01101000)2はココに書かれている。

なんでやねんという突っ込みを入れたくなるが、音楽CDでも使用されている書き方である。領域1と領域2が有り、どちらも15%の欠損が修復できる誤り訂正能力が有るとする。ある程度固まった場所にエラーが発生する事を想定すると、固めて領域を配置するよりもばらばらに配置した方が欠損領域を均等化できる確率が高いので修復もしやすい。
例えば領域を左右で配置したものとばらばらに配置したグリッドのまとまった部分を破壊してみる。

左の図では領域破壊率が偏っているが、右の図では分散されている様子が分かる。この状態は左の図では領域破壊率が17.5%と9.8%。右の図では13.9%と13.9%になっている。15%の誤り訂正能力が有るので、左の図は訂正できないが、右の図は訂正できる事が分かる。
処理は複雑になるが容量を増やさずに誤り訂正できる確率を高める良い作戦。
感想
読めないQRコードを探すといろいろ見つかりそう。まぁ、たくさん見つけたとしてもシステム化してボタン一つで読めるようなプログラムを構築している訳では無いので、見つけてもドット打ち作業が発生してメンドイから積極的に探す気は無い。たまにはやるかも?
システム化が可能か?でいうと困難。QRコードには種類が有りすぎて、QRコードが読めない原因は無数に存在する。どのパターンも良い感じに読めるようにするような処理は存在しないだろう。読み取り時間はかかるが通常より誤り訂正率がちょっと高いQRコードリーダーとかなら作れるかもしれんが。

























