Engineering tools · EPC · GS1

RFID Kódkonverter

Konverter eszköz a SGTIN-96 (RFID Hexa) és a Vonalkód (GTIN) + Sorozatszám között. Kompatibilis a standard RFID olvasókkal, mint például a Zebra, Chainway, Impinj, Nextwaves. A GS1 EPC Tag Data Standard alapján.

RFID konverter

Konvertálás az RFID Hex (SGTIN-96) és a GS1 vonalkód (GTIN) + sorozatszám között.

Scheme:SGTIN-9696 bits / Header 0x30

Kódlogika és lépésről lépésre

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

Fejlesztői kód

Használja ezt a segédlogikát a projektjében. Válasszon nyelvet alább.

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}

Magyarázat

A SGTIN-96 egy 96 bites bináris karakterlánc, amely 6 részre oszlik:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Fejléc (8 bit)Bits 0-8 (8)
001100000x30

Szabványos előtag (00110000), amely SGTIN-96-ként azonosítja.

Szűrő (3 bit)Bits 8-11 (3)
0113

Objektum típusa (pl. 1 = Kiskereskedelmi egység). Lásd a hivatkozási útmutatót alább.

Partíció (3 bit)Bits 11-14 (3)
1015

A 5 partíció a következőket jelenti: A Vállalati kód 24 bitet, a Termékkód 20 bitet foglal el.

Vállalati ElőtagBits 14-38 (24)
1000100001010111110000118935363

A GS1 által hozzárendelt egyedi vállalati kód.

Tétel referenciaBits 38-58 (20)
00010111011001011101095837

Az Ön egyedi termékkódja.

Sorozatszám (38 bit)Bits 58-96 (38)
000000000000000000000000000000000000011

Egyedi azonosító az egyes fizikai termékekhez.

A fizikai vonalkód és az elektronikus termékkód (EPC) közötti kapcsolat vizualizálása.

Diagram a vonalkód (GTIN) és a SGTIN-96 URI közötti kapcsolatot mutatja
  1. 1. lépés: Határozza meg az EPC séma bináris fejléc értékét. A SGTIN-96 bináris fejléc értéke „00110000”.
  2. 2. lépés: Válassza ki a Partíció értékét a Vállalati előtagban lévő számjegyek száma alapján a Partíció érték táblázatból.
  3. 3. lépés: Konvertálja a Szűrő értéket, a Partíció értéket, a Vállalati előtagot, a Cikk referenciát és a Sorozatszámot bináris értékre.
  4. 4. lépés: Fűzze össze a Fejlécet, a Szűrőt, a Partíciót, a Vállalati előtagot, a Cikk referenciát és a Sorozatszám bináris értékeit, hogy megkapja a Bináris EPC-t.

SGTIN-96 Referencia útmutató

ÉrtékLeírás
0Minden más
Olyan tételekhez használják, amelyek nem illeszkednek más kategóriákba. Ritkán használják a kiskereskedelemben.
1Értékesítési pont (POS) kereskedelmi tétel
A szabványos fogyasztói egység, amelyet az értékesítési ponton értékesítenek. Példa: Egyetlen samponos üveg.
2Teljes tok a szállításhoz
Egy szabványos szállítási egység, amely több tételt tartalmaz. Példa: Egy karton 12 samponos üveggel. Kritikus a logisztika számára, hogy megkülönböztesse az 'egy tokot' az 'egy tételtől'.
3Fenntartva
Jövőbeni felhasználásra fenntartva.
4Belső csomag kereskedelmi tételcsoportosítás
Egy teljes toknál kisebb csoportosítás, gyakran polcon történő megjelenítéshez vagy kezeléshez. Példa: Egy zsugorcsomagolt 3-as csomag a fő kartonon belül.
5Fenntartva
Jövőbeni felhasználásra fenntartva.
6Egységrakomány
Nagy logisztikai egység, jellemzően egy raklap, amely több kartont tartalmaz.
7Komponens a fogyasztói egységen belül
Egy adott alkatrész a fogyasztói egységen belül. Példa: Az elemtartó fedél egy játékon belül.
ÉrtékCég előtagTétel hivatkozás
040 Bitek / 12 Számjegyek4 Bitek / 1 Számjegyek
137 Bitek / 11 Számjegyek7 Bitek / 2 Számjegyek
234 Bitek / 10 Számjegyek10 Bitek / 3 Számjegyek
330 Bitek / 9 Számjegyek14 Bitek / 4 Számjegyek
427 Bitek / 8 Számjegyek17 Bitek / 5 Számjegyek
524 Bitek / 7 Számjegyek20 Bitek / 6 Számjegyek
620 Bitek / 6 Számjegyek24 Bitek / 7 Számjegyek

SGTIN-96 Gyakran Ismételt Kérdések

  • Megadja a rendszernek a címke csomagolási szintjét. Ha egy rendszer egy 'Case' (Tok) címkét olvas (Szűrő 2), tudja, hogy több terméket tartalmaz. Ez megakadályozza a duplán számolást (pl. egy tokot egyetlen egységként számolva), és lehetővé teszi az érvényes szállítási ellenőrzést.
  • Case (Tok, Szűrő 2) a szállítás során használt elsődleges szállítási egység. A Inner Pack (Belső Csomag, Szűrő 4) egy felosztás a tokon belül, általában a könnyebb kezelés vagy a bemutatás érdekében (mint például egy 6-os csomag egy 24-es dobozban). A logisztikai rendszerek a Tokokat követik nyomon; az áruházi műveletek hatékonyan kezelhetik a Belső Csomagokat.
  • A dekódolás sikertelen lesz, vagy rossz vonalkódot eredményez. A Partíció pontosan meghatározza, hogy hol ér véget a Vállalati Előtag, és hol kezdődik az Elem Referencia. Ha ez a 'felosztási pont' rossz, akkor a szándékolttól eltérő Vállalati Kódot kap.
  • A standard GTIN (Vonalkód) csak a terméktípust azonosítja (pl. '12oz Soda'). Az SGTIN-96 hozzáad egy Sorozatszámot, amely minden egyes doboznak egyedi identitást ad. Ez lehetővé teszi az elem szintű nyomon követhetőséget, lehetővé téve, hogy pontosan nyomon kövesse, hogy melyik konkrét terméket adták el, lopták el vagy járt le.
  • Igen. Ahogy a fenti konverterben látható, az SGTIN-96 karakterlánc tartalmazza a teljes GTIN-14-et. A Sorozatszám és a fejléc információk eltávolításával tökéletesen rekonstruálhatja az eredeti kiskereskedelmi vonalkódot.
  • A Fejléc (0x30) egy GS1 által meghatározott szabványos 8 bites előtag. Egyszerűen azt mondja az RFID olvasónak: "Ez a címke a SGTIN-96 szabványt használja." Más fejlécek is léteznek a különböző szabványokhoz (például SSCC a raklapokhoz vagy GIAI az eszközökhöz).