QRコードの誤り訂正と値検証の知識マップ(知識グラフ)
QRコードはリード・ソロモン符号による誤り訂正を備えるが、これは印刷パターンからの復元であって値の正しさの保証ではなく、損傷が符号語の近傍に偏って入り込むと規格が明記する通り別の妥当な符号語として誤って復元されることがある。さらに誤り訂正の外側にも分割QR(Structured Append)や文字コード指定(ECI)の不備といった、エラーを出さずに誤った値を返す原因が存在する。これらに対し業務システム側は形式検査・チェックディジット・マスタ照合をこの順で重ねる多段検証で受け止める必要があり、チェックディジットは1文字の誤りを確実に検出できる一方で複数文字の変化は取りこぼすため、実在確認だけでなく今処理すべき対象との一致まで見るマスタ照合が最後の砦になる。QRの下にGS1のHRI(人間が読める表記)を併記しておくことも、誤読が疑われた際の発見手段として有効である。
QRコード
デンソーウェーブが開発した、誤り訂正機能を持つマトリックス型の二次元シンボル(バーコード)である。
二次元コード
リード・ソロモン誤り訂正
QRコードが採用する、符号語単位で汚れや破損からデータを復元する誤り訂正方式であり、訂正能力を超える損傷では復元せず読み取り不能になる。
Reed-Solomon符号
QRの誤り訂正
QRコードの誤読
デコーダがエラーを出さずに、元の値とは異なる妥当な値を読み取り結果として返してしまう現象である。
誤ったデコード結果
誤復号
分割QR(Structured Append)
長いデータを複数のQRシンボルに分割し、読み取り側で集めて連結する仕組みである。
連結QR
ECI(拡張チャネル解釈)
QRコードのバイトモードで使用する文字コードなどの解釈方式を明示的に宣言する仕組みで、指定がない場合の既定解釈は規格の版によって異なる。
文字コード指定
チェックディジット(検査用数字)
コードの末尾(または先頭)に、他の桁から計算で導けるよう付ける1桁で、入力されたコードの誤りをその場で検出する仕組み。
検査用数字
チェックデジット
入力値の検証(バリデーション)
仕様上ありえない値を受け付けない検証処理。IPAは、幅広い文字種を許す自由記述項目ではXSS対策としての有効性が限定的であり、この方法に頼ることは推奨されないとしている。
入力チェック
マスタ照合(業務検証)
読み取った値が実在し、かつ今処理すべき対象と一致するかを、マスタデータや業務文脈と突き合わせて確認する検証段階である。
業務検証
台帳突合
GS1のHRI(人間が読める表記)
GS1が定める、バーコードの下に人が目視で読める文字列を併記する考え方である。
人間可読表記
QRコードはリード・ソロモン符号による誤り訂正を採用しており、汚れや破損があってもデータを復元できるよう設計されている
損傷が別の符号語の近傍に偏って入り込むと、規格が明記する通り「明らかに妥当だが異なる符号語」として誤って復元することがある
長いデータを複数のシンボルに分割する場合、QRコードには読み取り側で連結する仕組み(Structured Append)がある
分割QRに対応しないデコーダが1枚目だけを読むと、末尾が欠けた値をエラーなく返すことがある(挙動は実装依存)
バイトモードで非ASCII文字を格納し、その文字コードを明示したい場合はECI指定が必要で、指定がなければ既定解釈は規格の版によって変わる。数字モード・英数字モードや、ASCIIの範囲に収めたバイトモードのQRコードにはこの前提は当てはまらない
ECI指定なしのバイトモードは実装ごとに既定の文字コード解釈が異なり、文字化けした文字列をエラーなく成功として返す実装がある
チェックディジットは1文字の変化を確実に検出できるが、複数文字が同時に変わる誤読は取りこぼす
受け取った文字列の長さ・文字種・接頭辞の形式検査を先に行い、対象外の文字がチェックディジット計算に届かないようにする
チェックディジットで自己整合性を確認したうえで、実在確認と今処理すべき対象との一致を業務検証で行う
マスタ照合を実在確認だけで終わらせず、いま処理すべき対象との一致まで確認することで古いラベルや別伝票の取り違えを検出できる
GS1のHRI(人間が読める表記)の考え方に沿ってQRの下に文字列を併記しておくと、誤読が疑われたときに人が突き合わせられる
GS1の運用に沿う業務QRでは、QRコードに人が読める文字列(HRI)を併記する
読み取った値は外部から来た未検証の入力として扱い、形式検査から始まる検証を課す必要がある
誤読の疑いは、伝票番号のチェックディジット不一致という形で機械的に確認できる(複数文字の変化は取りこぼす)
業務QRの多くは、内容にモジュラス10などのチェックディジットを含むコード体系で設計される
長さ・文字種・区切り・接頭辞の完全一致を見る形式検査は、分割QRの断片や文字化けした文字列を検出できる(誤り訂正由来の同一形式の誤読は検出できない)