Engineering tools · EPC · GS1

RFID Konverter Kodova

Konverter alat između SGTIN-96 (RFID Hex) i Barkoda (GTIN) + Serijski Broj. Kompatibilan sa standardnim RFID čitačima poput Zebra, Chainway, Impinj, Nextwaves. Baziran na GS1 EPC Tag Data Standard.

RFID Konverter

Konvertujte između RFID Hex (SGTIN-96) i GS1 Barkoda (GTIN) + Serijski Broj.

Scheme:SGTIN-9696 bits / Header 0x30

Logika Kodiranja & Korak po Korak

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

Kod za Programere

Koristite ovu logiku alata u vašem projektu. Odaberite jezik ispod.

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}

Objašnjenje

SGTIN-96 je binarni niz od 96 bita podijeljen na 6 dijelova:

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

Standardni prefiks (00110000) koji identificira ovaj SGTIN-96.

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

Tip objekta (npr. 1 = Maloprodajna roba). Pogledajte Referentni vodič ispod.

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

Particija 5 znači: Kod Kompanije zauzima 24 bita, Kod Proizvoda zauzima 20 bita.

Prefiks KompanijeBits 14-38 (24)
1000100001010111110000118935363

Jedinstveni kod kompanije dodijeljen od strane GS1.

Referenca ArtiklaBits 38-58 (20)
00010111011001011101095837

Vaš specifični kod proizvoda.

Serijski Broj (38 bit)Bits 58-96 (38)
000000000000000000000000000000000000011

Jedinstveni identifikator za svaki specifični fizički proizvod.

Vizualizacija odnosa između vašeg fizičkog barkoda i elektronskog koda proizvoda (EPC).

Dijagram koji pokazuje vezu između Barkoda (GTIN) i SGTIN-96 URI-ja
  1. Korak 1: Odredite binarnu vrijednost headera za EPC shemu. Binarna vrijednost headera za SGTIN-96 je "00110000".
  2. Korak 2: Odaberite Vrijednost Particije na osnovu broja cifara u Prefiksu Kompanije iz tablice Vrijednosti Particije.
  3. Korak 3: Konvertujte Filter, Particiju, Prefiks Kompanije, Referencu Artikla i Serijski Broj u binarnu vrijednost.
  4. Korak 4: Spojite redom Header, Filter, Particija, Prefiks Kompanije, Referenca Artikla i Serijski Broj da formirate Binarni EPC.

SGTIN-96 Referentni Vodič

VrijednostOpis
0Svi Ostali
Koristi se za artikle koji ne odgovaraju drugim kategorijama. Rijetko se koristi u općoj maloprodaji.
1Artikal za Prodaju (POS)
Standardna potrošačka jedinica prodata na Prodajnom Mjestu. Primjer: Jedna boca šampona.
2Puna Kutija za Transport
Standardna jedinica za isporuku koja sadrži više artikala. Primjer: Karton od 12 boca šampona. Kritično za logistiku da razlikuje 'jednu kutiju' od 'jednog artikla'.
3Rezervisano
Rezervisano za buduću upotrebu.
4Unutarnja Grupa Artikala
Grupa manja od pune kutije, često za police ili rukovanje. Primjer: Trojka umotana u plastiku unutar glavne kutije.
5Rezervisano
Rezervisano za buduću upotrebu.
6Jedinični Teret
Velika logistička jedinica, tipično paleta koja sadrži više kutija.
7Komponenta unutar Potrošačke Jedinice
Specifičan dio unutar potrošačke jedinice. Primjer: Poklopac baterije unutar igračke.
VrijednostPrefiks KompanijeReferenca Artikla
040 Bitovi / 12 Cifre4 Bitovi / 1 Cifre
137 Bitovi / 11 Cifre7 Bitovi / 2 Cifre
234 Bitovi / 10 Cifre10 Bitovi / 3 Cifre
330 Bitovi / 9 Cifre14 Bitovi / 4 Cifre
427 Bitovi / 8 Cifre17 Bitovi / 5 Cifre
524 Bitovi / 7 Cifre20 Bitovi / 6 Cifre
620 Bitovi / 6 Cifre24 Bitovi / 7 Cifre

Često Postavljana Pitanja o SGTIN-96

  • On govori sistemu nivo pakovanja oznake. Ako sistem pročita oznaku 'Kutija' (Filter 2), zna da sadrži više artikala. Ovo sprječava dvostruko brojanje (npr. brojanje kutije kao jedne jedinice) i omogućava validnu verifikaciju isporuke.
  • Kutija (Filter 2) je primarna jedinica za isporuku koja se koristi za transport. Unutarnja Grupa (Filter 4) je podjela unutar te kutije, obično za lakše rukovanje ili izlaganje (kao trojka unutar kutije od 24 komada). Logistički sistemi prate Kutije; Prodajne operacije bi mogle efikasno rukovati Unutarnjim Grupama.
  • Dekodiranje će propasti ili proizvesti pogrešan Barkod. Particija određuje tačno gdje Prefiks Kompanije završava i gdje Referenca Artikla počinje. Ako je ova 'tačka podjele' pogrešna, dobit ćete drugi Kod Kompanije nego što je namijenjeno.
  • Standardni GTIN (Barkod) samo identificira tip proizvoda (npr. '330ml Soda'). SGTIN-96 dodaje Serijski Broj, dajući svakoj limenci jedinstveni identitet. Ovo omogućava praćenje na nivou artikla, omogućavajući vam da pratite tačno koji specifični artikal je prodan, ukraden ili istekao.
  • Da. Kao što je prikazano u konverteru iznad, SGTIN-96 string sadrži kompletan GTIN-14. Uklanjanjem Serijskog Broja i informacija headera, možete savršeno rekonstruisati originalni maloprodajni barkod.
  • Header (0x30) je standardni 8-bitni prefiks definisan od strane GS1. Jednostavno govori bilo kojem RFID čitaču: "Ova oznaka je kodirana koristeći standard SGTIN-96." Drugi headeri postoje za različite standarde (kao SSCC za palete ili GIAI za imovinu).