Engineering tools · EPC · GS1

Pretvornik RFID kode

Orodje za pretvorbo med SGTIN-96 (RFID Hex) in Črtno kodo (GTIN) + serijsko številko. Združljivo s standardnimi RFID bralniki, kot so Zebra, Chainway, Impinj, Nextwaves. Temeljijo na GS1 EPC Tag Data Standard.

RFID pretvornik

Pretvorite med RFID Hex (SGTIN-96) in GS1 črtno kodo (GTIN) + serijsko številko.

Scheme:SGTIN-9696 bits / Header 0x30

Logika kode in korak za korakom

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

Koda razvijalca

Uporabite to logiko orodja v vašem projektu. Izberite jezik spodaj.

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}

Razlaga

SGTIN-96 je 96-bitni binarni niz, razdeljen v 6 delov:

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

Standardna predpona (00110000), ki identificira to kot SGTIN-96.

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

Tip objekta (npr. 1 = Retail). Glej spodnji referenčni vodnik.

Partition (3 bita)Bits 11-14 (3)
1015

Particija 5 pomeni: Koda podjetja zavzame 24 bitov, koda izdelka zavzame 20 bitov.

Predpona podjetjaBits 14-38 (24)
1000100001010111110000118935363

Edinstvena koda podjetja, dodeljena s strani GS1.

Referenca artiklaBits 38-58 (20)
00010111011001011101095837

Vaša specifična koda izdelka.

Serijska številka (38 bitov)Bits 58-96 (38)
000000000000000000000000000000000000011

Edinstveni identifikator za vsak specifičen fizični izdelek.

Vizualizacija odnosa med vašo fizično črtno kodo in elektronsko kodo izdelka (EPC).

Diagram, ki prikazuje povezavo med črtno kodo (GTIN) in SGTIN-96 URI
  1. Korak 1: Določite binarno vrednost glave za shemo EPC. Binarna vrednost glave za SGTIN-96 je “00110000.”
  2. Korak 2: Izberite vrednost particije na podlagi števila števk v predponi podjetja iz tabele vrednosti particije.
  3. Korak 3: Pretvorite vrednost filtra, vrednost particije, predpono podjetja, referenco artikla in serijsko številko v binarno vrednost.
  4. Korak 4: Zaporedno združite binarne vrednosti glave, filtra, particije, predpone podjetja, reference artikla in serijske številke, da ustvarite binarni EPC.

Vodič po SGTIN-96

VrednostOpis
0Vsi ostali
Uporablja se za artikle, ki ne spadajo v druge kategorije. Redko se uporablja v splošni trgovini.
1Trgovinski artikel na prodajnem mestu (POS)
Standardna potrošniška enota, prodana na prodajnem mestu. Primer: Ena steklenica šampona.
2Polna škatla za transport
Standardna pošiljka, ki vsebuje več artiklov. Primer: Karton 12 šamponskih steklenic. Ključno za logistiko je razlikovanje 'enega paketa' od 'enega artikla'.
3Rezervirano
Rezervirano za prihodnjo uporabo.
4Skupina notranjih pakirnih artiklov
Skupina, manjša od celotnega paketa, pogosto za razstavljanje na polici ali rokovanje. Primer: Shrink-embalirana 3-pack znotraj glavnega kartona.
5Rezervirano
Rezervirano za prihodnjo uporabo.
6Enota nalaganja
Velika logistična enota, običajno paleta, ki vsebuje več paketov.
7Komponenta znotraj potrošniške enote
Specifičen del znotraj potrošniške enote. Primer: Pokrov baterije v igrački.
VrednostPredpona podjetjaReferenca artikla
040 Biti / 12 Številke4 Biti / 1 Številke
137 Biti / 11 Številke7 Biti / 2 Številke
234 Biti / 10 Številke10 Biti / 3 Številke
330 Biti / 9 Številke14 Biti / 4 Številke
427 Biti / 8 Številke17 Biti / 5 Številke
524 Biti / 7 Številke20 Biti / 6 Številke
620 Biti / 6 Številke24 Biti / 7 Številke

Pogosto zastavljena vprašanja o SGTIN-96

  • Sistem sporoči nivo pakiranja oznake. Če sistem prebere oznako 'Case' (Filter 2), ve, da vsebuje več artiklov. To prepreči dvojno štetje (npr. štetje škatle kot enega samega enote) in omogoča veljavno preverjanje pošiljke.
  • Case (Filter 2) je primarna enota pošiljanja, uporabljena za transport. Inner Pack (Filter 4) je podrazdelitev znotraj te škatle, običajno za lažje rokovanje ali prikaz (npr. 6-pack znotraj 24-can škatle). Logistični sistemi sledijo škatlam; Trgovske operacije lahko učinkovito upravljajo z notranjimi paketi.
  • Dekodiranje bo spodletelo ali bo ustvarilo napačno črtno kodo. Partition določa natančno, kje se konča Predpona podjetja in začne Referenca artikla. Če je ta 'točka delitve' napačna, boste dobili drugačno kodo podjetja, kot je bilo nameravano.
  • Standardni GTIN (črtna koda) identificira le vrsto izdelka (npr. '12oz Soda'). SGTIN-96 doda serijsko številko, ki vsaki pločevinki dodeli edinstveno identiteto. To omogoča sledljivost na ravni artikla, kar vam omogoča, da sledite točno, kateri posamezni izdelek je bil prodan, ukraden ali je potekel.
  • Da. Kot je prikazano v pretvorniku zgoraj, niz SGTIN-96 vsebuje celoten GTIN-14. Z odstranitvijo serijske številke in informacij o glavi lahko popolnoma obnovite izvirno maloprodajno črtno kodo.
  • Header (0x30) je standardni 8-bitni predpona, ki jo definira GS1. Preprosto sporoči vsakemu RFID bralniku: "Ta oznaka je kodirana po standardu SGTIN-96." Obstajajo druge glave za različne standarde (npr. SSCC za palete ali GIAI za sredstva).