Engineering tools · EPC · GS1

Converter ng RFID Code

Converter tool sa pagitan ng SGTIN-96 (RFID Hex) at Barcode (GTIN) + Serial Number. Tugma sa mga karaniwang RFID reader tulad ng Zebra, Chainway, Impinj, Nextwaves. Batay sa GS1 EPC Tag Data Standard.

Converter ng RFID

Mag-convert sa pagitan ng RFID Hex (SGTIN-96) at GS1 Barcode (GTIN) + Serial Number.

Scheme:SGTIN-9696 bits / Header 0x30

Code Logic & Hakbang-Hakbang

// 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

Kodigo ng Developer

Gamitin ang utility logic na ito sa iyong proyekto. Pumili ng wika sa ibaba.

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}

Ipaliwanag

Ang SGTIN-96 ay isang 96-bit binary string na nahahati sa 6 na bahagi:

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

Karaniwang prefix (00110000) na nagpapakilala nito bilang SGTIN-96.

Bộ lọc (3 bit)Bits 8-11 (3)
0113

Uri ng bagay (hal. 1 = Retail Retail). Tingnan ang Reference Guide sa ibaba.

Phân vùng (3 bit)Bits 11-14 (3)
1015

Ang Partition 5 ay nangangahulugan na: Ang Company Code ay kumukuha ng 24 bits, ang Product Code ay kumukuha ng 20 bits.

Prefix ng KumpanyaBits 14-38 (24)
1000100001010111110000118935363

Natatanging code ng kumpanya na itinalaga ng GS1.

Sanggunian ng ItemBits 38-58 (20)
00010111011001011101095837

Ang iyong partikular na code ng produkto.

Số sê-ri (38 bit)Bits 58-96 (38)
000000000000000000000000000000000000011

Natatanging identifier para sa bawat partikular na pisikal na produkto.

Pagpapakita ng ugnayan sa pagitan ng iyong pisikal na barcode at ang electronic product code (EPC).

Diagram na nagpapakita ng koneksyon sa pagitan ng Barcode (GTIN) at SGTIN-96 URI
  1. Hakbang 1: Tukuyin ang binary header value para sa EPC schema. Ang binary header value para sa SGTIN-96 ay “00110000.”
  2. Hakbang 2: Piliin ang Partition Value batay sa bilang ng mga digit sa Company Prefix mula sa Partition Value Table.
  3. Hakbang 3: I-convert ang Filter Value, Partition Value, Company Prefix, Item Reference, at Serial # sa binary value.
  4. Hakbang 4: Pagsama-samahin nang sunud-sunod ang Header, Filter, Partition, Company Prefix, Item Reference, at Serial # binary values upang mabuo ang Binary EPC.

Gabay sa Sanggunian ng SGTIN-96

HalagaPaglalarawan
0Lahat ng Iba Pa
Ginagamit para sa mga item na hindi akma sa ibang mga kategorya. Bihirang gamitin sa pangkalahatang retail.
1Kalakal sa Point of Sale (POS)
Ang karaniwang yunit ng consumer na ibinebenta sa Point of Sale. Halimbawa: Isang bote ng shampoo.
2Buong Kaso para sa Transportasyon
Isang karaniwang yunit ng pagpapadala na naglalaman ng maraming item. Halimbawa: Isang karton ng 12 bote ng shampoo. Kritikal para sa logistik upang makilala ang 'isang kaso' mula sa 'isang item'.
3Nakalaan
Nakalaan para sa paggamit sa hinaharap.
4Pag-grupo ng Kalakal sa Inner Pack
Isang pagpapangkat na mas maliit kaysa sa isang buong kaso, kadalasan para sa pagpapakita sa istante o paghawak. Halimbawa: Isang shrink-wrapped 3-pack sa loob ng pangunahing karton.
5Nakalaan
Nakalaan para sa paggamit sa hinaharap.
6Đơn vị tải
Isang malaking yunit ng logistical, kadalasang isang pallet na naglalaman ng maraming kaso.
7Komponent sa loob ng Consumer Unit
Isang partikular na bahagi sa loob ng isang consumer unit. Halimbawa: Ang takip ng baterya sa loob ng isang laruan.
HalagaPrefix ng KumpanyaReference ng Item
040 Mga Bits / 12 Mga Digit4 Mga Bits / 1 Mga Digit
137 Mga Bits / 11 Mga Digit7 Mga Bits / 2 Mga Digit
234 Mga Bits / 10 Mga Digit10 Mga Bits / 3 Mga Digit
330 Mga Bits / 9 Mga Digit14 Mga Bits / 4 Mga Digit
427 Mga Bits / 8 Mga Digit17 Mga Bits / 5 Mga Digit
524 Mga Bits / 7 Mga Digit20 Mga Bits / 6 Mga Digit
620 Mga Bits / 6 Mga Digit24 Mga Bits / 7 Mga Digit

Mga Madalas Itanong tungkol sa SGTIN-96

  • Sinabi nito sa sistema ang antas ng packaging ng tag. Kung ang isang sistema ay nagbabasa ng isang 'Case' tag (Filter 2), alam nito na naglalaman ito ng maraming item. Pinipigilan nito ang dobleng pagbibilang (hal., pagbibilang ng isang case bilang isang solong yunit lamang) at nagbibigay-daan para sa wastong pag-verify ng pagpapadala.
  • Case (Filter 2) ang pangunahing yunit ng pagpapadala na ginagamit para sa transportasyon. Ang Inner Pack (Filter 4) ay isang subdibisyon sa loob ng case na iyon, kadalasan para sa mas madaling paghawak o pagpapakita (tulad ng 6-pack sa loob ng 24-can case). Sinusubaybayan ng mga sistema ng Logistics ang Cases; Maaaring mahusay na hawakan ng mga operasyon ng Tindahan ang Inner Packs.
  • Mabibigo ang pag-decode o makagawa ng maling Barcode. Tinutukoy ng Partition kung saan eksaktong nagtatapos ang Company Prefix at nagsisimula ang Item Reference. Kung mali ang 'split point' na ito, makakakuha ka ng ibang Company Code kaysa sa nilalayon.
  • Tinutukoy lamang ng Standard GTIN (Barcode) ang uri ng produkto (hal., '12oz Soda'). Nagdaragdag ang SGTIN-96 ng isang Serial Number, na nagbibigay sa bawat solong lata ng natatanging pagkakakilanlan. Pinapagana nito ang item-level traceability, na nagbibigay-daan sa iyong subaybayan kung aling partikular na item ang naibenta, ninakaw, o nag-expire.
  • Oo. Gaya ng ipinapakita sa converter sa itaas, ang SGTIN-96 string ay naglalaman ng kumpletong GTIN-14. Sa pamamagitan ng pag-alis ng Serial Number at impormasyon ng header, maaari mong perpektong muling buuin ang orihinal na retail barcode.
  • Ang Header (0x30) ay isang karaniwang 8-bit prefix na tinukoy ng GS1. Sinasabi lamang nito sa anumang RFID reader: "Ang tag na ito ay naka-encode gamit ang SGTIN-96 standard." Mayroon pang ibang mga header para sa iba't ibang mga pamantayan (tulad ng SSCC para sa mga pallet o GIAI para sa mga asset).