Qraft (クラフト)

エンコードモード

読み: エンコードモード

エンコードモードは、 QR コードがデータをモジュールパターンに変換する際の符号化方式です。数字モード (0-9 のみ)、英数字モード (0-9、 A-Z、一部記号)、バイトモード (任意のバイナリデータ)、漢字モード (Shift JIS の漢字) の 4 種類があります。

数字モードは 1 文字あたりの消費ビット数が最も少なく、同じ QR コードサイズでより多くのデータを格納できます。 QR コード生成ツールは通常、入力データに応じて最も効率的なモードを自動選択します。 英数字モードで扱えるのは 0-9・大文字 A-Z・スペースと $ % * + - . / : の 45 文字だけなので、小文字を含む一般的な URL はバイトモードで符号化されます。1 文字あたりのビット数はバイトモードの 8 ビットに対し英数字モードは 5.5 ビットなので、URL 全体を大文字に変換して文字集合を 45 文字に収めると、同じ内容でもより小さく収まります。ドメイン部だけを大文字にしても、小文字のスキーム (https://) が残っていればバイトモードのままです。

モードの選択はデータ量QR コードのサイズに直結します。数字だけのデータをあえて英数字モードで格納すると、データ本体は数字モードの約 1.7 倍のビット数になります (11 桁の電話番号なら 37 ビットに対して 61 ビット)。逆に、製品コードやシリアル番号のように大文字英数字だけで設計された文字列は英数字モードに収まりますが、小文字やアンダースコアが 1 文字混じるだけでバイトモードへ落ちます。漢字モードは Shift JIS の 2 バイト文字を 1 文字 13 ビットで表すため、同じ日本語を UTF-8 のままバイトモードで格納する場合 (1 文字 3 バイト = 24 ビット) よりデータ量を抑えられますが、Shift JIS に無い文字が含まれると使えません。手動でモードを指定するときは、格納する文字がそのモードの文字集合に収まっているかを先に確かめてください。

どのモードでデータを符号化したかは、データ列の先頭に置かれる 4 ビットのモード識別子 (モード指示子) で区別されます。数字モードは 0001、英数字モードは 0010、バイトモードは 0100、漢字モードは 1000 が割り当てられており、読み取り側はこの 4 ビットを見て続くデータの解釈方法を判断します。