Engineering tools · EPC · GS1

Konverter Kode RFID

Alat konverter antara SGTIN-96 (Hex RFID) dan Barcode (GTIN) + Nomor Seri. Kompatibel dengan pembaca RFID standar seperti Zebra, Chainway, Impinj, Nextwaves. Berdasarkan GS1 EPC Tag Data Standard.

Konverter RFID

Konversi antara RFID Hex (SGTIN-96) dan GS1 Barcode (GTIN) + Nomor Seri.

Scheme:SGTIN-9696 bits / Header 0x30

Logika Kode & Langkah demi Langkah

// 1. Binary Conversion

src = bin(0x3076215F0C5D974000000001) // = "001100000111011000100001010111110000110001011101100101110100000000000000000000000000000000000001"

// 2. Extract Fields (Bit Slice)

header = src[0:8] "00110000" 0x30
filter = src[8:11] "011" 3
partition = src[11:14] "101" 5

// 3. Determine Partition Rule (Partition 5)

rule = PARTITIONS[5]
// Company Bits: 24, Item Bits: 20

// 4. Extract Company, Item & Serial

company = src[14:38] "100010000101011111000011" 8935363
itemRef = src[38:58] "00010111011001011101" 095837
serial = src[58:96] "00000000000000000000000000000000000001" 1

Kode Pengembang

Gunakan logika utilitas ini dalam proyek Anda. Pilih bahasa di bawah ini.

1// TypeScript / JavaScript SGTIN-96 Utils
2
3export const GS1_PARTITION_TABLE = [
4  { value: 0, partition: 0, companyPrefixBits: 40, itemReferenceBits: 4, companyDigits: 12, itemDigits: 1 },
5  { value: 1, partition: 1, companyPrefixBits: 37, itemReferenceBits: 7, companyDigits: 11, itemDigits: 2 },
6  { value: 2, partition: 2, companyPrefixBits: 34, itemReferenceBits: 10, companyDigits: 10, itemDigits: 3 },
7  { value: 3, partition: 3, companyPrefixBits: 30, itemReferenceBits: 14, companyDigits: 9, itemDigits: 4 },
8  { value: 4, partition: 4, companyPrefixBits: 27, itemReferenceBits: 17, companyDigits: 8, itemDigits: 5 },
9  { value: 5, partition: 5, companyPrefixBits: 24, itemReferenceBits: 20, companyDigits: 7, itemDigits: 6 },
10  { value: 6, partition: 6, companyPrefixBits: 20, itemReferenceBits: 24, companyDigits: 6, itemDigits: 7 },
11];
12
13export function encodeSgtin96(gtin: string, serial: string, filter: number) {
14  gtin = gtin.padStart(14, "0");
15  const p = GS1_PARTITION_TABLE.find(rule => {
16    const cp = parseInt(gtin.slice(1, 1 + rule.companyDigits));
17    const ir = parseInt(gtin[0] + gtin.slice(1 + rule.companyDigits, 13));
18    return cp < (1 << rule.companyPrefixBits) && ir < (1 << rule.itemReferenceBits);
19  });
20  if (!p) throw new Error("Invalid GTIN for SGTIN-96");
21
22  const cpVal = parseInt(gtin.slice(1, 1 + p.companyDigits));
23  const irVal = parseInt(gtin[0] + gtin.slice(1 + p.companyDigits, 13));
24  
25  let b = (0x30).toString(2).padStart(8,"0");
26  b += filter.toString(2).padStart(3,"0");
27  b += p.partition.toString(2).padStart(3,"0");
28  b += cpVal.toString(2).padStart(p.companyPrefixBits,"0");
29  b += irVal.toString(2).padStart(p.itemReferenceBits,"0");
30  b += parseInt(serial).toString(2).padStart(38,"0");
31  return binaryToHex(b);
32}
33
34export function decodeSgtin96(hex: string) {
35  const b = hexToBinary(hex);
36  const pVal = parseInt(b.substring(11, 14), 2);
37  const rule = GS1_PARTITION_TABLE.find(r => r.partition === pVal);
38  if (!rule) throw new Error("Invalid Partition");
39
40  const cp = parseInt(b.substring(14, 14 + rule.companyPrefixBits), 2);
41  const ir = parseInt(b.substring(14 + rule.companyPrefixBits, 14 + rule.companyPrefixBits + rule.itemReferenceBits), 2);
42  const serial = parseInt(b.substring(14 + rule.companyPrefixBits + rule.itemReferenceBits, 96), 2);
43
44  const cpStr = cp.toString().padStart(rule.companyDigits, "0");
45  const irStr = ir.toString().padStart(rule.itemDigits, "0");
46  const gtinCore = irStr[0] + cpStr + irStr.substring(1);
47
48  // Check digit calculation
49  let sum = 0;
50  for (let i = 0; i < 13; i++) {
51    sum += parseInt(gtinCore[i]) * (i % 2 === 0 ? 3 : 1);
52  }
53  const check = (10 - (sum % 10)) % 10;
54  
55  return {
56    gtin: gtinCore + check,
57    serial: serial.toString()
58  };
59}
60
61function binaryToHex(b: string) {
62  let hex = "";
63  for (let i = 0; i < b.length; i += 4) {
64    hex += parseInt(b.substring(i, i + 4), 2).toString(16).toUpperCase();
65  }
66  return hex;
67}
68
69function hexToBinary(h: string) {
70  let bin = "";
71  for (let i = 0; i < h.length; i++) {
72    bin += parseInt(h[i], 16).toString(2).padStart(4, "0");
73  }
74  return bin;
75}

Jelaskan

SGTIN-96 adalah string biner 96-bit yang dibagi menjadi 6 bagian:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Header (8 bit)Bits 0-8 (8)
001100000x30

Awalan standar (00110000) yang mengidentifikasi ini sebagai SGTIN-96.

Filter (3 bit)Bits 8-11 (3)
0113

Jenis objek (misalnya 1 = Ritel Ritel). Lihat Panduan Referensi di bawah ini.

Partisi (3 bit)Bits 11-14 (3)
1015

Partisi 5 berarti: Kode Perusahaan mengambil 24 bit, Kode Produk mengambil 20 bit.

Awalan PerusahaanBits 14-38 (24)
1000100001010111110000118935363

Kode perusahaan unik yang ditetapkan oleh GS1.

Referensi ItemBits 38-58 (20)
00010111011001011101095837

Kode produk spesifik Anda.

Nomor Seri (38 bit)Bits 58-96 (38)
000000000000000000000000000000000000011

Pengidentifikasi unik untuk setiap produk fisik tertentu.

Memvisualisasikan hubungan antara barcode fisik Anda dan kode produk elektronik (EPC).

Diagram yang menunjukkan hubungan antara Barcode (GTIN) dan SGTIN-96 URI
  1. Langkah 1: Tentukan nilai header biner untuk skema EPC. Nilai header biner untuk SGTIN-96 adalah “00110000.”
  2. Langkah 2: Pilih Nilai Partisi berdasarkan jumlah digit dalam Awalan Perusahaan dari Tabel Nilai Partisi.
  3. Langkah 3: Konversikan Nilai Filter, Nilai Partisi, Awalan Perusahaan, Referensi Item, dan Nomor Seri ke nilai biner.
  4. Langkah 4: Rangkaikan secara berurutan Header, Filter, Partisi, Awalan Perusahaan, Referensi Item, dan nilai biner Nomor Seri untuk membentuk EPC Biner.

Panduan Referensi SGTIN-96

NilaiDeskripsi
0Semua Lainnya
Digunakan untuk item yang tidak sesuai dengan kategori lain. Jarang digunakan dalam ritel umum.
1Item Perdagangan Point of Sale (POS)
Unit konsumen standar yang dijual di Point of Sale. Contoh: Satu botol sampo.
2Full Case untuk Transportasi
Unit pengiriman standar yang berisi beberapa item. Contoh: Satu karton berisi 12 botol sampo. Penting untuk logistik untuk membedakan 'satu kasus' dari 'satu item'.
3Tersedia
Tersedia untuk penggunaan di masa mendatang.
4Pengelompokan Item Perdagangan Inner Pack
Pengelompokan yang lebih kecil dari satu kasus penuh, seringkali untuk tampilan rak atau penanganan. Contoh: 3-pack yang dibungkus shrink di dalam karton utama.
5Tersedia
Tersedia untuk penggunaan di masa mendatang.
6Muat Unit
Unit logistik besar, biasanya palet yang berisi beberapa kasus.
7Komponen di dalam Unit Konsumen
Bagian tertentu di dalam unit konsumen. Contoh: Penutup baterai di dalam mainan.
NilaiAwalan PerusahaanReferensi Item
040 Bits / 12 Digit4 Bits / 1 Digit
137 Bits / 11 Digit7 Bits / 2 Digit
234 Bits / 10 Digit10 Bits / 3 Digit
330 Bits / 9 Digit14 Bits / 4 Digit
427 Bits / 8 Digit17 Bits / 5 Digit
524 Bits / 7 Digit20 Bits / 6 Digit
620 Bits / 6 Digit24 Bits / 7 Digit

Pertanyaan Umum SGTIN-96

  • Ini memberi tahu sistem tingkat pengemasan tag. Jika sistem membaca tag 'Case' (Filter 2), sistem tahu bahwa tag tersebut berisi beberapa item. Hal ini mencegah penghitungan ganda (misalnya, menghitung sebuah case sebagai satu unit) dan memungkinkan verifikasi pengiriman yang valid.
  • Case (Filter 2) adalah unit pengiriman utama yang digunakan untuk transportasi. Inner Pack (Filter 4) adalah subdivisi di dalam case tersebut, biasanya untuk penanganan atau tampilan yang lebih mudah (seperti kemasan 6-pack di dalam case berisi 24 kaleng). Sistem logistik melacak Case; Operasi toko mungkin menangani Inner Pack secara efisien.
  • Dekode akan gagal atau menghasilkan Barcode yang salah. Partisi menentukan dengan tepat di mana Awalan Perusahaan berakhir dan Referensi Item dimulai. Jika 'titik pemisah' ini salah, Anda akan mendapatkan Kode Perusahaan yang berbeda dari yang dimaksud.
  • GTIN (Barcode) standar hanya mengidentifikasi jenis produk (misalnya, 'Soda 12oz'). SGTIN-96 menambahkan Nomor Seri, yang memberikan identitas unik untuk setiap kaleng. Hal ini memungkinkan traceability tingkat item, yang memungkinkan Anda melacak item spesifik mana yang dijual, dicuri, atau kedaluwarsa.
  • Ya. Seperti yang ditunjukkan dalam konverter di atas, string SGTIN-96 berisi GTIN-14 lengkap. Dengan menghapus Nomor Seri dan informasi header, Anda dapat merekonstruksi barcode ritel asli dengan sempurna.
  • Header (0x30) adalah awalan 8-bit standar yang ditentukan oleh GS1. Header ini hanya memberi tahu pembaca RFID: "Tag ini dikodekan menggunakan standar SGTIN-96." Header lain ada untuk standar yang berbeda (seperti SSCC untuk palet atau GIAI untuk aset).