ライブラリが FNC1 特殊文字のデコードをサポートしている限り、GS1 コードの読み取りに使用できます。FNC1 文字は、データ ストリーム内のバイトではなく、フォーマット シンボルです。
仕様では、先頭の FNC1 文字を使用して GS1 バーコードを識別し、"]d2"
(GS1 DataMatrix)、"]C1"
(GS1-128)、"]e0"
(GS1 DataBar Omnidirectional)、または"]Q3"
(GS1 QR コード) としてデコードする必要があると述べています。その他の FNC1 文字は、ASCII GS 文字 (バイト値 29) としてデコードする必要があります。
ライブラリによっては、先頭の FNC1 が欠落しているか、デコードされているGS
(重要ではない) か、埋め込まれた FNC1 文字が欠落している (重要) 可能性があります。埋め込まれた FNC1 文字は、可変長フィールドを区切るために使用されます。
完全な仕様はこちら(pdf) で読むことができます。データをデコードするためのアルゴリズムは、見出し7.9 GS1 アプリケーション識別子を使用した GS1 シンボルからのデータの処理(426 ページ) の下にあります。
アルゴリズムは次のようになります。
Peek at the first character.
If it is ']',
If string does not start with ']C1' or ']e0' or ']d2' or ']Q3',
Not a GS1 barcode.
Stop.
Consume the caracters.
Else if it is <GS>,
Consume character.
Else,
No symbology identifier, assume GS1.
While not end of input,
Read the first two digits.
If they are in the table of valid codes,
Look up the length of the AI-code.
Read the rest of the code.
Look up the length of the field.
If it is variable-length,
Read until the next <FNC1> or <GS>.
Else,
Read the rest if the field.
Peek at the next character.
If it is <FNC1> or <GS>, consume it.
Save the read field.
Else,
Error: Invalid AI
QR コードのバイナリ データは、データが埋め込まれた 4 ビット トークンとしてエンコードされます。
0111 -> Start Extended Channel Interpretation (ECI) Mode (special encodings).
0001, 0010, 0100, 1000 -> start numeric, alphanumeric, raw 8-bit, kanji encoded data.
0011 -> structured append (combine two or more QR Codes to one data-stream).
0101 -> FNC1 initial position.
1001 -> FNC1 other positions.
0000 -> End of stream (can be omitted if not enough space).
エンコーディング仕様の後にデータ長が続き、その後に実際のデータが続きます。データ ビットの意味は、使用されるエンコーディングによって異なります。データブロックの間で、FNC1 文字をスクイーズできます。
残念ながら、QR コード仕様 ( ISO/IEC 18004 ) には費用がかかります (210 フラン)。ただし、海賊版がオンラインで見つかる場合があります。
GS1 QR コードを作成するには、データで FNC1 文字を指定できる必要があります。ライブラリは、"]Q3" プレフィックスと GS 文字を認識するか、他の方法で FNC1 トークンを書き込めるようにする必要があります。
FNC1 文字を記述する何らかの方法がある場合は、次のように GS1 データをエンコードできます。
Write initial FNC1.
For each field,
Write the AI-code as decimal digits.
Write field data.
If the code is a variable-length field,
If not the last field,
Write FNC1 to terminate the field.
可能であれば、可変長フィールドが最後になるようにフィールドを並べ替える必要があります。
コメントでテリー・バートンが指摘したように。GS1 QR コードの FNC1 シンボルは、%
英数字データのように、およびバイト モードの GS としてエンコードできます。実際のパーセント記号をエンコードするには、次のように記述します%%
。
をエンコードする(01) 04912345123459 (15) 970331 (30) 128 (10) ABC123
には、まずそれをデータ文字列に結合します01049123451234591597033130128%10ABC123
( %
indicator はエンコードされた FNC1 シンボルです)。この文字列は次のように記述されます。
0101 - Initial FNC1, GS1 mode indicator
0001 - QR numeric mode
0000011101 - Data length (29)
<data bits for "01049123451234591597033130128">
0010 - QR alphanumeric mode
000001001 - Data length (9)
<data bits for "%10ABC123">
(ISO 18004:2006 仕様の例)