記事中の QR 風画像では iPhone/iPad (iOS 15.2他) 機能(コードスキャナー)の
バグ(以前に正しく読み取れたデータと誤認して動作開始)を誘発します。
iPhone/iPad のバグ確認と予測不能な動作を防ぐため、"https://qiita.com/" の QR を置いておきます。
これをスキャンして Qiita のホームが開いたら、左上の「閉じる」を実行し、下記の QR 風画像をスキャンすると Qiita のホームが再び開きます。
下記の QR を iPhone/iPad でいきなりスキャンすると、最後にスキャンに成功したものと同じ動作する恐れがあります。
コードスキャナーのプロセスをきちんと終了させてから起動すると問題は発生しませんが、アプリの切り替え操作ではコードスキャナーが終了したように見えることがあります。この場合、アプリの一覧には出てこないだけで、プロセスは終了しておらず、コードスキャナーを起動すると「閉じる」操作と同じ状態から開始されるようです。
QR として認識されてしまう画像
見るからに、何もデータが入ってなさそうです。(QR 生成ソフト開発してたら動作確認のために、こういうのを作ってしまいますよね?)
この画像を QR として見た場合の状態は
内容 | 備考 | |
---|---|---|
○ | 位置検出パターン | |
○ | タイミングパターン | |
× | 形式情報 | マスク処理後の値が 00000 0000000000 になっている |
○ | マスク パターン | 参照子が 000 と同じならば |
○ | データ コード語 | マスク パターンを解除した場合、全てゼロ(埋め草がない) |
○ | 誤り訂正 コード語 | マスク パターンを解除した場合、全てゼロ |
となるハズです。
手元で試した QR リーダーのいくつかは、これが読み取れたことになります。
読み取れたことになるからには
- 情報形式の欠如をパスする(マスクパターンの参照子は 000 としてしまう)
- マスク パターンを解除すると、データ コード語と誤り訂正 コード語が全てゼロ
- コード語が全てゼロだと誤り訂正の必要がない
という経路を辿っていると推測できます。
最後に「エラーなしでデータ コード語が読み取れた」という部分が他の誤処理を覆い隠している感は否めません。そして、データ(文字列)復元のため、最初のモード指示子の取得を試みると終端パターンが現れるので、見事に空データを取得できてしまいます。
エラーとしてもよさそうなポイントがいくつかあります。
- 形式情報の欠如
- 全コード語がゼロ
- データの最初が終端パターン
リーダーを作る事があったら、これには気をつけたい。