Penukar Kod RFID

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

Penukar RFID

Logik Kod & Langkah-demi-Langkah

// 1. Binary Conversion

src = bin(0x) // = "?"

// 2. Extract Fields (Bit Slice)

header = src[0:8] → "00110000""?" (?)
filter = src[8:11] → "..."?
partition = src[11:14] → "..."?

// 3. Determine Partition Rule (Partition ?)

rule = PARTITIONS[?]
// Company Bits: ?, Item Bits: ?

// 4. Extract Company & Item

company = src[14:14] → "..."?
itemRef = src[14:14] → "..."?
serial = src[14:96] → "..."?

Kod Pembangun

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

Memahami SGTIN & GTIN

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

Rajah menunjukkan sambungan antara Kod Bar (GTIN) dan URI SGTIN-96

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

HDR
FLT
PRT
COMPANY
ITEM
SERIAL (38)

Analisis Terperinci (Bit demi Bit)

Pengepala (8 bit)Bits 0-8 (8)
00110000

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

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

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

Pemisah (3 bit)Bits 11-14 (3)
...

Pemisah X bermaksud: Kod Syarikat mengambil Y bit, Kod Produk mengambil Z bit.

Awalan SyarikatBits 14-0 (0)
...

Kod syarikat unik yang diberikan oleh GS1.

Rujukan ItemBits 0-0 (0)
...

Kod produk khusus anda.

Nomor Siri (38 bit)Bits 0-96 (38)
...

Pengecam unik untuk setiap produk fizikal tertentu.

Logik Penyandian (Langkah-demi-Langkah)

  1. Isi GTIN-13 dengan sifar untuk membentuk GTIN-14.
  2. Pecahkan GTIN-14 kepada Awalan Syarikat dan Rujukan Item (berdasarkan Pemisah).
  3. Tukar Penapis, Pemisah, Awalan Syarikat, Rujukan Item, Siri kepada Binari.
  4. Gabungkan semua rentetan binari (menjadi 96 bit) dan tukar kepada Hex.

Panduan Rujukan SGTIN-96

FNilai Penapis (3 bit)

NilaiPenerangan
0
Lain-lain
Digunakan untuk item yang tidak sesuai dengan kategori lain. Jarang digunakan dalam peruncitan umum.
1
Item Dagangan Titik Jualan (POS)
Unit pengguna standard yang dijual di Titik Jualan. Cth: Sebotol syampu.
2
Kes Penuh untuk Pengangkutan
Unit penghantaran standard yang mengandungi berbilang item. Cth: Karton berisi 12 botol syampu. Kritikal untuk logistik bagi membezakan 'satu kes' daripada 'satu item'.
3
Dizabkan
Dizabkan untuk kegunaan masa hadapan.
4
Kumpulan Item Dagangan Pek Dalam
Kumpulan yang lebih kecil daripada kes penuh, sering untuk paparan rak atau pengendalian. Cth: 3-pek dibungkus susut di dalam karton utama.
5
Dizabkan
Dizabkan untuk kegunaan masa hadapan.
6
Unit Muatan
Unit logistik besar, biasanya palet mengandungi pelbagai kes.
7
Komponen dalam Unit Pengguna
Bahagian khusus di dalam unit pengguna. Cth: Penutup bateri di dalam mainan.

PJadual Pemisah (3 bit)

Nilai
Awalan Syarikat
(Bit / Digit)
Rujukan Item
(Bit / Digit)
040 / 124 / 1
137 / 117 / 2
234 / 1010 / 3
330 / 914 / 4
427 / 817 / 5
524 / 720 / 6
620 / 624 / 7

Soalan Lazim SGTIN-96