エンコードとデコード
読み: えんこーどとでこーど
エンコードはデータをある規則に従って別の形式に変換する処理、デコードはその逆変換で元のデータを復元する処理です。文字コード (UTF-8)、画像圧縮 (JPEG)、暗号化 (AES) など、デジタル技術のあらゆる場面でこの対の操作が使われています。
QR コードの生成はエンコードそのものです。入力データ (URL、テキスト、連絡先情報など) を、エンコーディングモードの選択 → データのビット列変換 → エラー訂正コードの付加 → マスクパターンの適用 → モジュール配置、という一連の手順で白黒のシンボルに変換します。スマートフォンのカメラで QR コードを読み取る行為がデコードであり、画像認識 → モジュール抽出 → マスク解除 → エラー訂正 → ビット列からデータへの復元、という逆順の処理が瞬時に実行されます。
QR コードには 4 つのエンコーディングモードがあり、データの種類に応じて最も効率的なモードが自動選択されます。数字のみなら数字モード (1 文字あたり約 3.3 ビット)、英数字なら英数字モード (約 5.5 ビット)、日本語なら漢字モード (13 ビット)、それ以外はバイトモード (8 ビット) です。同じデータでもモードの選択によって QR コードのサイズが変わるため、エンコーダーの最適化がコードの小型化に直結します。
デコードの堅牢性を支えるのがリード・ソロモン符号によるエラー訂正です。汚れや破損でモジュールの一部が読み取れなくても、冗長データから元のビット列を復元できます。エンコード時に「余分な」データを付加するコストを払うことで、デコード時の信頼性を確保する設計です。