Engineering tools · EPC · GS1

Penukar Kod RFID

Alat penukar antara SGTIN-96 (Hex RFID) dan Kod Bar (GTIN) + Nombor Siri. Sesuai dengan pembaca RFID standard seperti Zebra, Chainway, Impinj, Nextwaves. Berdasarkan GS1 EPC Tag Data Standard.

Penukar RFID

Tukar antara RFID Hex (SGTIN-96) dan Kod Bar GS1 (GTIN) + Nombor Siri.

Scheme:SGTIN-9696 bits / Header 0x30

Logik Kod & 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

Kod Pemaju

Gunakan logik utiliti ini dalam projek anda. Pilih bahasa di bawah.

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}

Terangkan

SGTIN-96 ialah rentetan binari 96-bit yang dibahagikan kepada 6 bahagian:

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

Awalan standard (00110000) yang mengenal pasti ini sebagai SGTIN-96.

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

Jenis objek (cth. 1 = Runcit Runcit). Lihat Panduan Rujukan di bawah.

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

Sekatan 5 bermaksud: Kod Syarikat mengambil 24 bit, Kod Produk mengambil 20 bit.

Awalan SyarikatBits 14-38 (24)
1000100001010111110000118935363

Kod syarikat unik yang diberikan oleh GS1.

Rujukan ItemBits 38-58 (20)
00010111011001011101095837

Kod produk khusus anda.

Nombor Siri (38 bit)Bits 58-96 (38)
000000000000000000000000000000000000011

Pengecam unik untuk setiap produk fizikal tertentu.

Membayangkan hubungan antara kod bar fizikal anda dan kod produk elektronik (EPC).

Gambar rajah yang menunjukkan hubungan antara Kod Bar (GTIN) dan SGTIN-96 URI
  1. Langkah 1: Tentukan nilai pengepala binari untuk skema EPC. Nilai pengepala binari untuk SGTIN-96 ialah “00110000.”
  2. Langkah 2: Pilih Nilai Sekatan berdasarkan bilangan digit dalam Awalan Syarikat daripada Jadual Nilai Sekatan.
  3. Langkah 3: Tukar Nilai Penapis, Nilai Sekatan, Awalan Syarikat, Rujukan Item, dan # Siri kepada nilai binari.
  4. Langkah 4: Cantumkan mengikut urutan Pengepala, Penapis, Sekatan, Awalan Syarikat, Rujukan Item, dan nilai binari # Siri untuk membentuk EPC Binari.

Panduan Rujukan SGTIN-96

NilaiPenerangan
0Semua Lain
Digunakan untuk item yang tidak sesuai dengan kategori lain. Jarang digunakan dalam runcit am.
1Item Perdagangan Point of Sale (POS)
Unit pengguna standard yang dijual di Point of Sale. Contoh: Sebotol syampu tunggal.
2Kes Penuh untuk Pengangkutan
Unit penghantaran standard yang mengandungi berbilang item. Contoh: Sekarton 12 botol syampu. Kritikal untuk logistik untuk membezakan 'satu kes' daripada 'satu item'.
3Tersimpan
Tersimpan untuk kegunaan masa depan.
4Pengumpulan Item Perdagangan Pek Dalaman
Pengumpulan yang lebih kecil daripada kes penuh, selalunya untuk paparan rak atau pengendalian. Contoh: Pek 3-pek yang dibalut dengan pengecut di dalam karton utama.
5Tersimpan
Tersimpan untuk kegunaan masa depan.
6Muatan Unit
Unit logistik yang besar, biasanya palet yang mengandungi berbilang kes.
7Komponen di dalam Unit Pengguna
Bahagian khusus di dalam unit pengguna. Contoh: Penutup bateri di dalam mainan.
NilaiAwalan SyarikatRujukan 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

Soalan Lazim SGTIN-96

  • Ia memberitahu sistem tahap pembungkusan tag. Jika sistem membaca tag 'Kes' (Penapis 2), ia tahu ia mengandungi berbilang item. Ini menghalang pengiraan berganda (cth, mengira kes sebagai hanya satu unit) dan membolehkan pengesahan penghantaran yang sah.
  • Kes (Penapis 2) ialah unit penghantaran utama yang digunakan untuk pengangkutan. Pek Dalam (Penapis 4) ialah subbahagian di dalam kes itu, biasanya untuk pengendalian atau paparan yang lebih mudah (seperti pek 6 di dalam kes 24 tin). Sistem logistik menjejaki Kes; Operasi kedai mungkin mengendalikan Pek Dalam dengan cekap.
  • Penyahkodan akan gagal atau menghasilkan Kod Bar yang salah. Sekatan menentukan dengan tepat di mana Awalan Syarikat berakhir dan Rujukan Item bermula. Jika 'titik pemisahan' ini salah, anda akan mendapat Kod Syarikat yang berbeza daripada yang dimaksudkan.
  • GTIN Standard (Kod Bar) hanya mengenal pasti jenis produk (cth, 'Soda 12oz'). SGTIN-96 menambah Nombor Siri, memberikan setiap tin identiti yang unik. Ini membolehkan kebolehkesanan peringkat item, membolehkan anda menjejaki dengan tepat item khusus yang dijual, dicuri atau tamat tempoh.
  • Ya. Seperti yang ditunjukkan dalam penukar di atas, rentetan SGTIN-96 mengandungi GTIN-14 yang lengkap. Dengan mengalih keluar Nombor Siri dan maklumat pengepala, anda boleh membina semula kod bar runcit asal dengan sempurna.
  • Pengepala (0x30) ialah awalan 8-bit standard yang ditakrifkan oleh GS1. Ia hanya memberitahu mana-mana pembaca RFID: "Tag ini dikodkan menggunakan standard SGTIN-96." Pengepala lain wujud untuk standard yang berbeza (seperti SSCC untuk palet atau GIAI untuk aset).