Engineering tools · EPC · GS1

Troswr Cod RFID

Offeryn tros rhwng SGTIN-96 (RFID Hex) a Mâ Gê (GTIN) + Rhif Cyfresol. Yn gydnaws ag darllenwyr RFID safonol fel Zebra, Chainway, Impinj, Nextwaves. Yn seiliedig ar Stalffordd Data Tag GS1 EPC.

Troswr RFID

Tros rhwng RFID Hex (SGTIN-96) a Mâ Gê GS1 (GTIN) + Rhif Cyfresol.

Scheme:SGTIN-9696 bits / Header 0x30

Rhesymeg Cod a Gam-wrth-Gam

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

Cod Datblygwr

Defnyddiwch y rhesymeg offeryn hwn yn eich prosiect. Dewiswch iaith isod.

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}

Esbonio

SGTIN-96 yw llinyn deuaidd 96-bit wedi'i rannu'n 6 rhan:

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

Rhagddodiad safonol (00110000) yn dynodi hwn fel SGTIN-96.

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

Math o wrthrych (e.e. 1 = Manwerthu). Gweler y Canllaw Cyfeirnod isod.

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

Partition 5 yn golygu: Mae Cod Cwmni'n cymryd 24 bit, Mae Cod Cynnyrch yn cymryd 20 bit.

Rhagddodiad CwmniBits 14-38 (24)
1000100001010111110000118935363

Cod cwmni unigryw a neilltuir gan GS1.

Cyfeirnod EitemBits 38-58 (20)
00010111011001011101095837

Eich cod cynnyrch penodol.

Rhif Cyfresol (38 bit)Bits 58-96 (38)
000000000000000000000000000000000000011

Dynodwr unigryw ar gyfer pob cynnyrch ffisegol penodol.

Darlunio'r berthynas rhwng eich mâ gê ffisegol a'r cod cynnyrch electronig (EPC).

Diagram yn dangos y cysylltiad rhwng Mâ Gê (GTIN) ac SGTIN-96 URI
  1. Cam 1: Pennwch werth header deuaidd ar gyferchema EPC. Yr werth header deuaidd ar gyfer SGTIN-96 yw "00110000."
  2. Cam 2: Dewiswch y Gwerth Partition yn seiliedig ar nifer y digidau yn y Rhagddodiad Cwmni o'r Tabl Gwerth Partition.
  3. Cam 3: Troswch y Gwerth Filter, Gwerth Partition, Rhagddodiad Cwmni, Cyfeirnod Eitem, a Rhif Cyfresol i werth deuaidd.
  4. Cam 4: Cysylltwch mewn trefn Header, Filter, Partition, Rhagddodiad Cwmni, Cyfeirnod Eitem, a Rhif Cyfresol i ffurfio'r EPC Deuaidd.

Canllaw Cyfeirnod SGTIN-96

GwerthDisgrifiad
0Pob Un Arall
Wedi'i defnyddio ar gyfer eitemau nad ydynt yn addas ar gyfer categorïau eraill. Anaml ei defnyddio mewn manwerthu cyffredinol.
1Eitem Masnach Pwynt Gwerthu (POS)
Yr uned ddefnyddiwr safonol a werthir ar Bwynt Gwerthu. Enghraifft: Potel o sebon pennau.
2Achos Llawn ar gyfer Cludo
Uned gludo safonol sy'n cynnwys eitemau lluosog. Enghraifft: Carton o 12 potel sebon pennau. Hanfodol ar gyfer logisteg i wahaniaethu rhwng 'un achos' ac 'un eitem'.
3Wedi Cadw
Wedi'i gadw ar gyfer defnydd yn y dyfodol.
4Grwpio Eitemau Pecyn Mewnol
Grwpio llai nag achos llawn, yn aml ar gyfer arddangos neu drin. Enghraifft: Pecyn 3 wedi'i lapio mewn gwydr y tu mewn i'r carton prif.
5Wedi Cadw
Wedi'i gadw ar gyfer defnydd yn y dyfodol.
6Llwyth Uned
Uned logisteg fawr, yn nodweddiadol paled sy'n cynnwys achosion lluosog.
7Cydran tu Mewn i Uned Ddefnyddiwr
Rhan benodol tu mewn i uned ddefnyddiwr. Enghraifft: Clawr batri tu mewn i dy pob.
GwerthRhagddodiad CwmniCyfeirnod Eitem
040 Didau / 12 Digit4 Didau / 1 Digit
137 Didau / 11 Digit7 Didau / 2 Digit
234 Didau / 10 Digit10 Didau / 3 Digit
330 Didau / 9 Digit14 Didau / 4 Digit
427 Didau / 8 Digit17 Didau / 5 Digit
524 Didau / 7 Digit20 Didau / 6 Digit
620 Didau / 6 Digit24 Didau / 7 Digit

Cwestiynau Cyffredin SGTIN-96

  • Mae'n dweud wrth y system lefel y pecynnu o'r tag. Os yw system yn darllen tag 'Achos' (Filter 2), mae'n gwybod ei fod yn cynnwys eitemau lluosog. Mae hyn yn atal cyfrif dwbl (e.e. cyfrif achos fel dim ond un uned sengl) ac yn galluogi dilysu cludo.
  • Achos (Filter 2) yw'r uned gludo sylfaenol a ddefnyddir ar gyfer cludo. Mae Pocyn Mewnol (Filter 4) yn is-adrannau o fewn yr achos hwnnw, yn aml ar gyfer trin neu arddangos haws (fel pecyn 6 o fewn achos 24). Mae systemau logisteg yn olrhain Achosion; Gallai gweithrediadau siop drin Pocynau Mewnol yn effeithlon.
  • Bydd y dadgodio'n methu neu'n cynhyrchu'r mâ gê anghywir. Mae Partition yn pennu'n union ble mae'r Rhagddodiad Cwmni'n gorffen a ble mae'r Cyfeirnod Eitem yn dechrau. Os yw'r 'pwynt hollt' hwn yn anghywir, cewch Cod Cwmni gwahanol na'r bwriad.
  • Dim ond yn nodi math y cynnyrch y mae GTIN safonol (Mâ Gê) (e.e. 'Soda 12oz'). Mae SGTIN-96 yn ychwanegu Rhif Cyfresol, gan roi identity unigryw i bob unigolyn. Galluoga tracio lefel eitem, gan ganiatáu ichi olrhain union ba eitem benodol a werthwyd, a gafodd ei dwyn, neu a ddaeth i ben.
  • Gallwch. Fel y gwelwch yn y troswr uchod, mae'r llinyn SGTIN-96 yn cynnwys y GTIN-14 cyflawn. Drwy dynnu'r Rhif Cyfresol a gwybodaeth header, gallwch adeiladu'n berffaith y mâ gê manwerthu gwreiddiol.
  • Y Header (0x30) yw rhagddodiad safonol 8-bit a ddiffinnir gan GS1. Mae'n syml yn dweud wrth unrhyw ddarllenydd RFID: "Mae'r tag hwn wedi'i amgryptio gan ddefnyddio'r safon SGTIN-96." Mae headerau eraill yn bodoli ar gyfer safonau gwahanol (fel SSCC ar gyfer paledi neu GIAI ar gyfer asedau).