付属書 I: 推奨 RFID 仕様
Q.4 データコンパクション(圧縮)スキーム
6 ビットコード 100 7 ビットコード 101 オクテット列 110 UTF-8 string 111 ビット 3~0 はオブジェクト識別子を含む。
オブジェクト識別子の内容は相対 OID の価値に依存する。
相対 OID が 10 進範囲 01 から 14 の時、オブジェクト識別子は 0001 バイナリから 1110 バイナリとして 符号化される。
相対 OID の 10 進値が 0 または 14 より大きい時、オブジェクト識別子は 1112 進数として符号化される。
Q.4.2 数値 コンパクション(プリカーソルは 010 binary)
数値コンパクション(圧縮)は、先頭のゼロを含む任意の 10 進数字文字列を符号化するように設計さ れる。文字列の長さは 2 文字以上とする。数値圧縮は、元の文字列長を保持し、一旦デコードされると、
先頭のゼロ(存在する場合)が出力される。入力バイトはすべて 30hex~39hex の範囲とする。
数値コンパクションの規則は次のとおり。
1. 各 10 進数を 4 ビット 2 進換算(2 進符号化 10 進)に変換する。
2. 奇数の数字の文字列がある場合は、さらに 4 ビットの文字列"1111binary"を追加して、圧縮を バイト境界に合わせる。
3. 各 4 ビット対をバイトとしてエンコードする。圧縮されたシーケンスをプリカーソルで数値、コード 値 010 バイナリとして定義する。
注: デコード処理中に、最後のバイトが"xF"の価値を持つ場合、最後の 4 ビット
"1111binary"は、奇数の 10 進数桁の数字文字列を再作成するために破棄さ れる。
Q.4.3 5 ビット コンパクション(プリカーソルは 011 binary)
5 ビットコンパクション(圧縮)は、大文字のラテン文字と区切り文字をエンコードするように設計されて いる。入力バイトはすべて 41hex~5Fhex の範囲とする。文字列の長さは 3 文字以上とする。このスキ ームを使用すると、最大 37%のメモリスペースを保存できます。Q.5 は、符号化可能な ISO/IEC 646 文 字を示す。
5 ビットコンパクションのルールは次のとおり。
1. 各文字について:
a. バイト値が 41hex~5Fhex の範囲にあることを確認する。
b. バイト値を 8 ビットバイナリ相当に変換する。
c. 先頭 3 ビット「010binary」を切り取る。
d. 残りの 5 ビットをビット列に書き込む。
2. すべての文字が 5 ビット値に変換され、連結されると、得られたビット列を最上位ビットから 始まる 8 ビットセグメントに分割する。もし最後のセグメントが 8 ビット未満なら、"0binary"
ビットでパディングする。
3. 8 ビットセグメントを 16 値に変換する。
4. 変換されたバイトシーケンスを 5 ビットコード、コード価値 011 b としてプリカーソルでエンコ ードする。
注: デコード処理の間、圧縮されたビットストリングの各 5 ビットセグメントは、送信 元データの 8 ビット値を再作成するためのプレフィックスとして「010 b」が追加さ れる。圧縮ビット列の最後に"0 binary "パッドビットが存在する場合、それら は破棄される。
注: 5、6、または 7 個のパッドビットが存在する場合、デコーダは、最初の 5 ビットを ソースデータに変換しようと試みることができる。ただし、これは文字 40hex と なり、5 ビット圧縮では対応せず、破棄する。
Q.4.4 6 ビット コンパクション(プリカーソルは 100 binary )
6 ビットコンパクション(圧縮)は、大文字のラテン文字、数字、および句読点をエンコードするように設 計されている。入力バイトはすべて 20hex~5Fhex の範囲とする。末尾のバイトが 20hex の場合は、7 ビットコンパクションを使用する。文字列の長さは 4 文字以上とする。この方式では、メモリ容量の 25%
まで保存できる。Q.5 は、符号化可能な ISO/IEC 646 文字を示す。
6 ビットコンパクションの規則は次のとおり。
1. 最終位置の 20hex バイトをチェックする。もし発見されたら、7 ビットコンパクションに進み、さも なければステップ 2~5 を続ける。
2. 各文字について:
a. バイト値が 20hex~5Fhex の範囲にあることを確認する。
b. バイト値を 8 ビットバイナリ相当に変換する。
c. 先頭の 2 ビットを切り取る:バイト 20hex~3Fhex は「00binary」、バイト 40hex~5Fhex は
「01binary」となる。
d. 残りの 6 ビットをビット列に連結する。
3. 得られたビット列を最上位ビットから 8 ビットセグメントに分割する。もし最後のセグメントが 8 ビ ット未満のパッドを含むなら、パッド文字列の最初の 2、4 または全ビットが「100000 バイナリ」と なる。
4. 8 ビットセグメントを 16 値に変換する。
5. 変換されたバイトシーケンスを 6 ビットコード、コード値 100 バイナリとしてプリカーソルでエンコ ードする。
デコード処理の間、圧縮されたビットストリングの各 6 ビットセグメントが解析される。
a. 最初のビットが"1binary"である場合、ビット"00 binary"は、価値 20hex を 3Fhex に変 換する前にプレフィックスとして追加される。
b. 最初のビットが「0binary」である場合、ビット「01 binary」は、価値 40hex を 5Fhex に変 換する前にプレフィックスとして追加さる。
符号化ビット列の最後にパッド列"10"、"1000"、"100000 binary"が存在する場合は廃棄する。
6 個のパッドビットが存在する場合、デコーダはこれをソースデータに変換しようと試みることができる。
この結果、20hex 文字が生成され、この最終位置ではサポートされず、破棄される。
データ圧縮処理によるオブジェクト処理の影響を以下に示す。
例:
オブジェクト内容{ABC123456}は、41 42 43 31 32 33 34 35 36 として 16 に変換される。このバイトストリ ームを解析すると、すべての値が 20hex~5Fhex の範囲にあり、6 ビットの圧縮が使用可能になる。オ ブジェクトバイトストリームは以下のように変換される。
HEX:41 42 43 31 32 33 34 35 36 バイナリ:
10000001 10000010 10000011 00110001 00110010 00110011 00110100 00110101 00110110 ビット 8 とビット 7 を削除する。
000001 000010 000011 110001 110010 110011 110100 110101 110110
これは 54 ビットであるため、パッド文字列「10」の最初の 2 ビットが追加され、56 ビット文字列は 8 ビッ ト値のシーケンスに分割される。
00000100 00100000 11110001 11001011 00111101 00110101 11011010 16 値に変換する。04 20 F1 CB 3D 35 DA
Q.4.5 7 ビット コンパクション(プレカーソルは 101 binary)
7 ビットコンパクション(圧縮)は、削除以外の制御文字を含むすべての ISO/IEC 646 文字を符号化す るように設計されている。すべての入力文字は 00hex から 7Ehex の範囲である。文字列の長さは 8 文 字以上とする。この方式では、メモリ容量の 12%まで保存できる。Q.5 は、符号化可能な ISO/IEC 646 文字を示す。
7 ビットコンパクションの規則は次のとおり。
1. 各文字について:
a. バイト値が 00hex~7Ehex の範囲にあることを確認する。
b. バイト値を 8 ビットバイナリ相当に変換する。
c. リードビット「0 binary」を切り取る。
d. 残りの 7 ビットをビット列に連結する。
2. すべての文字が 7 ビット値に変換されたら、結果として得られるビット列を最上位ビットで始ま る 8 ビットセグメントに分割する。もし最後のセグメントが 8 ビット未満なら、「1 binary」ビットで パッドする。
3. 8 ビットセグメントを 16 値に変換する。
4. 変換されたバイトシーケンスを 7 ビットコード、コード値 101 binary としてプリカーソルでエンコ ードする。
注: デコード処理の間、圧縮されたビットストリングの各 7 ビットセグメントは、送信 元データの 8 ビット値を再作成するためのプレフィックスとしてビット「0」が追加 される。もし"1"パッドビットが符号化ビット列の終わりに存在するなら、それら は捨てられる。7 個のパッドビットが存在する場合、デコーダはこれらをソース
データに変換しようと試みることができる。ただし、7 ビットコンパクトでは対応し ない文字 7Fhex となり、破棄する。
例:
データオブジェクト内容 {Ace123451337}は、4163 65 31 31 33 33 34 33 333 37 として 16 値に変換され る。
このバイトストリームを解析すると、すべての値が 00hex から 7Ehex の範囲にあり、7 ビットコンパクシ ョンが使用可能になる。オブジェクトバイトストリームは以下のように変換される。
HEX:41 63 65 23 31 32 33 34 35 31 33 33 37 バイナリ:
01000001 01100011 01100101 00100011 00110001 00110010 00110011 00110100 00110101 00110001 00110011 00110011 00110111
先頭(左端)ビットを削除する。
1000001 1100011 1100101 0100011 0110001 0110010 0110011 0110100 0110101 0110001 0110011 0110011 0110111
91 ビットのみであるため、パッド文字列「11111」の最初の 5 ビットが追加され、96 ビット文字列は 8 ビッ ト価値のシーケンスに分割される。
10000011 10001111 00101010 00110110 00101100 10011001 10110100 01101010 11000101 10011011 00110110 11111111
16 値に変換する。83 8F 2A 36 2C 99 B4 6A C5 9B 36 FF
注: 最後にエンコードされたバイトはすべて 1 を含むが、7 ビットステップで最初の バイトからデコードすることにより、パッドビットが正しく認識され、破棄されるこ とが保証される。
Q.4.6 Octet 文字列–変更されない 8 ビット符号化(プレカーソルは 110 binary)
Q.4.6 8 ビット符号化(プレカーソルは 110 binary)は、上記の圧縮方式のいずれも呼び出せない場合に 使用される。それは 00hex から FFhex の範囲の全バイトを符号化する。エンコードされたバイト文字列 は、ソースのバイト文字列と同じである。プリカーソルのコード値 110 binary をオクテット文字列としてエ ンコードする。
注: デコード処理不要。