Engineering tools · EPC · GS1

RFID pretvarač koda

Alat za pretvorbu između SGTIN-96 (RFID Hex) i Bar koda (GTIN) + Serijskog broja. Kompatibilan sa standardnim RFID čitačima kao što su Zebra, Chainway, Impinj, Nextwaves. Temelji se na GS1 EPC Tag Data Standard.

RFID pretvarač

Pretvorite između RFID Hex (SGTIN-96) i GS1 barkoda (GTIN) + serijskog broja.

Scheme:SGTIN-9696 bits / Header 0x30

Logika koda i 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 razvojne programere

Upotrijebite ovu logiku uslužnog programa u svom projektu. Odaberite jezik u nastavku.

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}

Objasni

SGTIN-96 je 96-bitni binarni niz podijeljen u 6 dijelova:

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

Standardni prefiks (00110000) koji identificira ovo kao SGTIN-96.

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

Vrsta objekta (npr. 1 = Maloprodaja). Pogledajte Vodič za referencu u nastavku.

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

Particija 5 znači: Kod tvrtke zauzima 24 bitova, kod proizvoda zauzima 20 bitova.

Prefiks tvrtkeBits 14-38 (24)
1000100001010111110000118935363

Jedinstveni kod tvrtke koji dodjeljuje 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 elektroničkog koda proizvoda (EPC).

Dijagram koji prikazuje vezu između barkoda (GTIN) i SGTIN-96 URI
  1. Korak 1: Odredite binarnu vrijednost zaglavlja za EPC shemu. Binarna vrijednost zaglavlja za SGTIN-96 je “00110000.”
  2. Korak 2: Odaberite vrijednost particije na temelju broja znamenki u prefiksu tvrtke iz tablice vrijednosti particije.
  3. Korak 3: Pretvorite vrijednost filtera, vrijednost particije, prefiks tvrtke, referencu na stavku i serijski broj u binarnu vrijednost.
  4. Korak 4: Spojite redom zaglavlje, filter, particiju, prefiks tvrtke, referencu na stavku i binarne vrijednosti serijskog broja kako biste formirali binarni EPC.

SGTIN-96 Referentni vodič

VrijednostOpis
0Svi ostali
Koristi se za artikle koji se ne uklapaju u druge kategorije. Rijetko se koristi u maloprodaji.
1Prodajni artikl (POS)
Standardna potrošačka jedinica koja se prodaje na prodajnom mjestu. Primjer: Jedna bočica šampona.
2Puni slučaj za transport
Standardna transportna jedinica koja sadrži više artikala. Primjer: Karton od 12 bočica šampona. Ključno za logistiku da se razlikuje 'jedan slučaj' od 'jednog artikla'.
3Rezervirano
Rezervirano za buduću upotrebu.
4Grupiranje artikala unutarnjeg pakiranja
Grupiranje manje od punog slučaja, često za izlaganje na polici ili rukovanje. Primjer: Skupina od 3 komada u foliji unutar glavnog kartona.
5Rezervirano
Rezervirano za buduću upotrebu.
6Jedinično opterećenje
Velika logistička jedinica, obično paleta koja sadrži više kutija.
7Komponenta unutar potrošačke jedinice
Određeni dio unutar potrošačke jedinice. Primjer: Poklopac baterije unutar igračke.
VrijednostPrefiks tvrtkeReferenca artikla
040 Bitovi / 12 Znamenke4 Bitovi / 1 Znamenke
137 Bitovi / 11 Znamenke7 Bitovi / 2 Znamenke
234 Bitovi / 10 Znamenke10 Bitovi / 3 Znamenke
330 Bitovi / 9 Znamenke14 Bitovi / 4 Znamenke
427 Bitovi / 8 Znamenke17 Bitovi / 5 Znamenke
524 Bitovi / 7 Znamenke20 Bitovi / 6 Znamenke
620 Bitovi / 6 Znamenke24 Bitovi / 7 Znamenke

SGTIN-96 Često postavljana pitanja

  • Sustavu govori o razini pakiranja oznake. Ako sustav očitava oznaku 'Kućište' (Filter 2), zna da sadrži više stavki. To sprječava dvostruko brojanje (npr. brojanje kućišta kao samo jedne jedinice) i omogućuje valjanu provjeru otpreme.
  • Kućište (Filter 2) je primarna transportna jedinica koja se koristi za prijevoz. Unutarnje pakiranje (Filter 4) je pododjeljak unutar tog kućišta, obično za lakše rukovanje ili izlaganje (poput paketa od 6 komada unutar kućišta od 24 limenke). Logistički sustavi prate kućišta; Operacije u trgovini mogu učinkovito rukovati unutarnjim pakiranjima.
  • Dekodiranje će propasti ili će dati pogrešan barkod. Particija točno određuje gdje završava Prefiks tvrtke, a počinje Referenca stavke. Ako je ova 'točka razdvajanja' pogrešna, dobit ćete drugačiji kod tvrtke od željenog.
  • Standardni GTIN (barkod) identificira samo vrstu proizvoda (npr. '12oz Soda'). SGTIN-96 dodaje serijski broj, dajući svakoj pojedinoj limenci jedinstveni identitet. To omogućuje sljedivost na razini stavke, što vam omogućuje da točno pratite koji je određeni artikl prodan, ukraden ili mu je istekao rok trajanja.
  • Da. Kao što je prikazano u pretvaraču iznad, niz SGTIN-96 sadrži kompletan GTIN-14. Uklanjanjem serijskog broja i informacija zaglavlja, možete savršeno rekonstruirati izvorni maloprodajni barkod.
  • Zaglavlje (0x30) je standardni 8-bitni prefiks definiran od strane GS1. Jednostavno govori bilo kojem RFID čitaču: "Ova je oznaka kodirana pomoću standarda SGTIN-96." Postoje i druga zaglavlja za različite standarde (poput SSCC za palete ili GIAI za imovinu).