Engineering tools · EPC · GS1

Konvertor RFID kódov

Nástroj na konverziu medzi SGTIN-96 (RFID Hex) a Čiarovým kódom (GTIN) + sériovým číslom. Kompatibilný so štandardnými RFID čítačkami, ako sú Zebra, Chainway, Impinj, Nextwaves. Založený na GS1 EPC Tag Data Standard.

RFID konvertor

Previesť medzi RFID Hex (SGTIN-96) a GS1 čiarovým kódom (GTIN) + sériovým číslom.

Scheme:SGTIN-9696 bits / Header 0x30

Logika kódu a krok za krokom

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

Kód pre vývojárov

Použite túto utilitnú logiku vo vašom projekte. Vyberte jazyk nižšie.

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}

Vysvetliť

SGTIN-96 je 96-bitový binárny reťazec rozdelený do 6 častí:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Hlavička (8 bitov)Bits 0-8 (8)
001100000x30

Štandardná predpona (00110000) identifikujúca toto ako SGTIN-96.

Filter (3 bity)Bits 8-11 (3)
0113

Typ objektu (napr. 1 = Retail Retail). Pozri referenčnú príručku nižšie.

Rozdelenie (3 bity)Bits 11-14 (3)
1015

Rozdelenie 5 znamená: Kód spoločnosti zaberá 24 bitov, Kód produktu zaberá 20 bitov.

Firemný prefixBits 14-38 (24)
1000100001010111110000118935363

Jedinečný kód spoločnosti pridelený organizáciou GS1.

Referencia položkyBits 38-58 (20)
00010111011001011101095837

Váš špecifický kód produktu.

Sériové číslo (38 bitov)Bits 58-96 (38)
000000000000000000000000000000000000011

Jedinečný identifikátor pre každý konkrétny fyzický produkt.

Vizualizácia vzťahu medzi vaším fyzickým čiarovým kódom a elektronickým kódom produktu (EPC).

Diagram zobrazujúci spojenie medzi čiarovým kódom (GTIN) a SGTIN-96 URI
  1. Krok 1: Určite binárnu hodnotu hlavičky pre schému EPC. Binárna hodnota hlavičky pre SGTIN-96 je „00110000“.
  2. Krok 2: Vyberte hodnotu rozdelenia na základe počtu číslic v firemnom prefixe z tabuľky hodnôt rozdelenia.
  3. Krok 3: Preveďte hodnotu filtra, hodnotu rozdelenia, firemný prefix, referenciu položky a sériové číslo do binárnej hodnoty.
  4. Krok 4: Zreťazte v poradí hlavičku, filter, rozdelenie, firemný prefix, referenciu položky a binárne hodnoty sériového čísla, aby ste vytvorili binárny EPC.

Referenčná príručka SGTIN-96

HodnotaPopis
0Všetky ostatné
Používa sa pre položky, ktoré nepatria do iných kategórií. Zriedkavo sa používa v bežnom maloobchode.
1Obchodná položka v mieste predaja (POS)
Štandardná spotrebiteľská jednotka predávaná v mieste predaja. Príklad: Jedna fľaša šampónu.
2Celý balík na prepravu
Štandardná prepravná jednotka obsahujúca viacero položiek. Príklad: Kartón s 12 fľašami šampónu. Kritické pre logistiku rozlíšiť „jeden balík“ od „jednej položky“.
3Rezervované
Rezervované pre budúce použitie.
4Skupinovanie obchodných položiek vnútornej balenia
Skupina menšia ako celý balík, často pre vystavenie na regáli alebo manipuláciu. Príklad: Zmenšený 3-ks balík vnútri hlavného kartónu.
5Rezervované
Rezervované pre budúce použitie.
6Jednotková nálož
Veľká logistická jednotka, zvyčajne paleta obsahujúca viacero krabíc.
7Komponent v spotrebnom zariadení
Špecifická časť v spotrebnom zariadení. Príklad: Kryt batérie v hračke.
HodnotaPrefix spoločnostiReferencia položky
040 Bity / 12 Číslice4 Bity / 1 Číslice
137 Bity / 11 Číslice7 Bity / 2 Číslice
234 Bity / 10 Číslice10 Bity / 3 Číslice
330 Bity / 9 Číslice14 Bity / 4 Číslice
427 Bity / 8 Číslice17 Bity / 5 Číslice
524 Bity / 7 Číslice20 Bity / 6 Číslice
620 Bity / 6 Číslice24 Bity / 7 Číslice

Často kladené otázky k SGTIN-96

  • Informuje systém o úrovni balenia značky. Ak systém prečíta značku 'Case' (Filter 2), vie, že obsahuje viacero položiek. To zabraňuje dvojitému počítaniu (napr. počítaniu prípadu ako jednej jednotky) a umožňuje platnú verifikáciu odoslania.
  • Case (Filter 2) je hlavná prepravná jednotka používaná na transport. Inner Pack (Filter 4) je pododdelenie v rámci tejto krabice, zvyčajne pre jednoduchšiu manipuláciu alebo prezentáciu (napríklad 6‑krabička v 24‑krabicovom balení). Logistické systémy sledujú Cases; prevádzka v obchodoch môže efektívne spracovávať Inner Packs.
  • Dekódovanie zlyhá alebo vygeneruje nesprávny čiarový kód. Partition určuje presne, kde končí Company Prefix a začína Item Reference. Ak je tento „bod rozdelenia“ nesprávny, získate odlišný Company Code, než je zamýšľané.
  • Štandardný GTIN (čiarový kód) identifikuje iba typ produktu (napr. „12oz Soda“). SGTIN-96 pridáva sériové číslo, čím každému jednotlivému plechovke poskytuje jedinečnú identitu. To umožňuje sledovanie na úrovni položky, čo vám umožní presne sledovať, ktorá konkrétna položka bola predaná, odcudzená alebo expirovala.
  • Áno. Ako je uvedené v konvertéri vyššie, reťazec SGTIN-96 obsahuje kompletný GTIN-14. Odstránením sériového čísla a informácií o hlavičke môžete dokonale obnoviť pôvodný maloobchodný čiarový kód.
  • Header (0x30) je štandardná 8‑bitová predpona definovaná organizáciou GS1. Jednoducho informuje akýkoľvek RFID čítač: „Táto značka je kódovaná podľa štandardu SGTIN-96.“ Pre rôzne štandardy existujú aj iné hlavičky (napríklad SSCC pre palety alebo GIAI pre majetok).