上級

タグエンコーディングと EPC メモリ

サプライチェーン統合のためのタグメモリアーキテクチャと GS1 エンコーディングをマスターする

4つのメモリバンク

すべての EPC Gen2 タグには正確に4つのメモリバンクがあり、それぞれが特定の目的を果たします。この構造を理解することは、タグのエンコーディング、読み取り、およびセキュリティ保護に不可欠です。

バンク 00 (Reserved): 32ビットの Kill パスワードと32ビットの Access パスワードが含まれています。デフォルト値は 0x00000000 です。Kill パスワードを送信するとタグは永久に無効化され、元に戻すことはできません。Access パスワードは、不正な書き込みを防ぐためにメモリバンクをロックします。

バンク 01 (EPC): StoredCRC(16ビット、自動計算)、StoredPC/Protocol Control(16ビット、EPC の長さとタグの機能を示す)、および EPC 値自体が含まれます。SGTIN-96 の場合は通常96ビット(12バイト)です。一部のタグは128ビットや496ビットの EPC をサポートしています。

バンク 10 (TID): 工場で書き込まれたタグ識別子(Tag Identifier)。チップ製造元コード、モデル番号、および一意のシリアル番号が含まれています。このバンクは読み取り専用で変更できないため、偽造防止やタグ認証に非常に有用です。

バンク 11 (User): オプションの追加ストレージ。サイズはチップによって異なり、NXP UCODE 9 は0ビット(ユーザーメモリなし)、Quanray QStar-7U は512ビット(64バイト)です。ロット番号、検査日、温度しきい値、またはメンテナンス記録に使用します。書き込む前に必ず利用可能な容量を確認してください。

SGTIN-96 エンコーディング — ステップ・バイ・ステップ

SGTIN-96 は最も広く使用されている EPC スキームです。GTIN-14(製品バーコード)と一意のシリアル番号を正確に96ビット(12バイト)にエンコードします。これにより、製品タイプごとに最大2,740億個の一意のシリアル番号を使用できます。

96ビットの構造: ヘッダー(8ビット、SGTIN-96 の場合は常に 0x30)→ フィルタ(3ビット: 0=すべて、1=POS、2=フルケース、3=予約済み、4=インナーパック、5=予約済み、6=ユニットロード、7=コンポーネント)→ パーティション(3ビット: 会社プレフィックスとアイテム参照の間でビットをどのように分割するかを定義)→ 会社プレフィックス(20–40ビット)→ アイテム参照(4–24ビット)→ シリアル番号(38ビット)。

パーティション値(0–6)によって、企業コード(Company Prefix)の長さが決まります。P=0 → 40ビットプレフィックス(12桁)、P=1 → 37ビット(11桁)、P=2 → 34ビット(10桁)、P=3 → 30ビット(9桁)、P=4 → 27ビット(8桁)、P=5 → 24ビット(7桁)、P=6 → 20ビット(6桁)。お使いのGS1企業コードの長さに応じて、使用するパーティション値が決まります。

💡

/tools/tds-rfid-converter にある Nextwaves TDS RFID Converter ツールを使用して、SGTIN-96値をインタラクティブにエンコードおよびデコードできます。GTIN-14とシリアル番号を入力すると、即座に16進数の EPC が取得できます。

SGTIN-96 Bit Structure
┌────────┬──────┬─────┬──────────────┬──────────────┬──────────────┐
│ Header │Filter│Part │Company Prefix│Item Reference│   Serial     │
│ 8 bits │3 bits│3bits│  20-40 bits  │   4-24 bits  │   38 bits    │
│  0x30  │ 0-7  │ 0-6 │  GS1 prefix  │  product ref │  unique ID   │
└────────┴──────┴─────┴──────────────┴──────────────┴──────────────┘

Partition table (defines prefix/item bit allocation):
P=0: 40-bit prefix (12 digits)  P=4: 27-bit prefix (8 digits)
P=1: 37-bit prefix (11 digits)  P=5: 24-bit prefix (7 digits)
P=2: 34-bit prefix (10 digits)  P=6: 20-bit prefix (6 digits)
P=3: 30-bit prefix (9 digits)

Example: 3034257BF7194E4000001A85
  Header=0x30 Filter=1 Part=5 Prefix=0614141
  Item=812345 Serial=6789 → GTIN-14: 80614141123458

その他の EPC スキーム

SGTIN-96以外にも、GS1はさまざまなサプライチェーン識別子向けに、いくつかの他の96ビット EPC スキームを定義しています。それぞれに固有のヘッダーバイトがあります。

タグメモリの読み取りと書き込み

棚卸し中のタグの読み取りは受動的です。リーダーがクエリを送信し、タグがバンク01から EPC を返します。しかし、バンク番号、ワードオフセット、ワードカウントを指定して READ コマンドを送信することで、任意のメモリバンクを明示的に読み取ることもできます。

タグへの書き込みには、より高い精度が必要です。タグをシングレーション(1つのタグのみが応答する状態)する必要があり、書き込みは一度に1ワード(16ビット)ずつ行われます。96ビットの EPC 全体を書き込むには、6回の連続したワード書き込みが必要です。各書き込みには10〜20msかかるため、1つのタグのエンコードには EPC データだけで60〜120msかかります。

一般的な書き込みエラー:タグがアンテナから遠すぎる(書き込みには読み取りよりも強い信号が必要です。タグを1m以内に近づけてください)。フィールド内に複数のタグがある(シングレーション失敗。対象のタグを隔離してください)。タグメモリがロックされている(アクセスパスワードが必要です)。書き込み検証の失敗(再試行するか、タグが不良品の可能性があります。一般的な不良率は10,000個につき1〜3個です)。

💡

ベストプラクティス:書き込み後は必ずデータを読み戻して比較し、検証してください。書き込みコマンドが成功しても、まれに隣接するビットが破損することがあります。書き込み後読み取り(Read-after-write)検証により、これらの問題を特定できます。

Write EPC — Nextwaves NRN Protocol
TX → 5A 00 01 02 11 00 0C [EPC_12_BYTES] [CRC16]

Write per 16-bit word: 10-20ms
Full 96-bit EPC = 6 words = 60-120ms total

With access password:
TX → 5A 00 01 02 11 00 10 [PWD_4B] [EPC_12B] [CRC16]

タグのセキュリティとパスワード

EPC Gen2タグは、セキュリティのために2つの32ビットパスワードをサポートしています。Access Passwordは特定のメモリバンクをロックします。一度設定されると、そのバンクは読み取りまたは書き込み操作の前にパスワードが必要になります。Kill Passwordは、送信されるとタグを永久に無効化します。これは主に小売業における消費者のプライバシー保護(チェックアウト後のタグの破棄)に使用される、不可逆的な操作です。

セキュリティのベストプラクティス:本番環境では、デフォルトの全ゼロパスワード(0x00000000)を絶対に使用しないでください。これはセキュリティを全く提供しません。タグのバッチごとに一意のパスワードを生成するか、会社プレフィックスをシードとして使用してください。パスワードはバックエンドシステムに保存し、タグ自体には決して保存しないでください(タグがアンロックされている場合、パスワードメモリは読み取られる可能性があります)。プログラミング後はパスワードバンクをロックしてください。TIDを隠し、EPCを削減することで、タグを無効化せずにプライバシーを保護するUntraceableモード(新しいチップで利用可能)の検討も推奨されます。

⚠️

Killコマンドは永続的で不可逆的です。元に戻すことはできません。一度タグがKillされると、二度とリーダーに応答することはありません。ソフトウェアには必ずKillパスワードの検証を実装し、Killコマンドを実行する前に管理者の承認を必要とするようにしてください。