Engineering tools · EPC · GS1

RFID konvertor koda

Alat za konverziju između SGTIN-96 (RFID Hex) i Bar kod (GTIN) + serijski broj. Kompatibilan sa standardnim RFID čitačima kao što su Zebra, Chainway, Impinj, Nextwaves. Zasnovan na GS1 EPC Tag Data Standard.

RFID konvertor

Konvertujte 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 programere

Koristite ovu logiku alata u vašem projektu. Izaberite 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 96-bitni binarni niz podeljen u 6 delova:

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

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

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

Tip objekta (npr. 1 = Retail Retail). Pogledajte referentni priručnik ispod.

Partition (3 bita)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 dodeljen od strane GS1.

Referenca artiklaBits 38-58 (20)
00010111011001011101095837

Vaš specifični kod proizvoda.

Serijski broj (38 bita)Bits 58-96 (38)
000000000000000000000000000000000000011

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

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

Dijagram koji prikazuje vezu između Bar kod (GTIN) i SGTIN-96 URI
  1. Korak 1: Odredite binarnu vrednost zaglavlja za EPC šemu. Binarna vrednost zaglavlja za SGTIN-96 je “00110000.”
  2. Korak 2: Izaberite vrednost particije na osnovu broja cifara u prefiksu kompanije iz tabele vrednosti particije.
  3. Korak 3: Pretvorite vrednost filtera, vrednost particije, prefiks kompanije, referencu artikla i serijski # u binarnu vrednost.
  4. Korak 4: Spojite redom zaglavlje, filter, particiju, prefiks kompanije, referencu artikla i serijski # binarne vrednosti kako biste formirali binarni EPC.

Vodič za referencu SGTIN-96

VrednostOpis
0Svi ostali
Koristi se za artikle koji ne spadaju u druge kategorije. Retko se koristi u opštem maloprodaji.
1Trgovinski artikl na mestu prodaje (POS)
Standardna potrošačka jedinica prodavana na mestu prodaje. Primer: Jedna flaša šampona.
2Puna kutija za transport
Standardna jedinica za otpremu koja sadrži više artikala. Primer: Karton od 12 flaša šampona. Ključno za logistiku da se razlikuje 'jedna kutija' od 'jednog artikla'.
3Rezervisano
Rezervisano za buduću upotrebu.
4Grupisanje unutrašnjih paketa
Grupisanje manje od pune kutije, često za izlaganje na policama ili rukovanje. Primer: Pakovanje od 3 proizvoda u shrink foliji unutar glavnog kartona.
5Rezervisano
Rezervisano za buduću upotrebu.
6Jedinična teretna jedinica
Velika logistička jedinica, obično paleta koja sadrži više kutija.
7Komponenta unutar potrošačke jedinice
Specifičan deo unutar potrošačke jedinice. Primer: Poklopac baterije unutar igračke.
VrednostPrefiks kompanijeReferenca artikla
040 Bitova / 12 Cifre4 Bitova / 1 Cifre
137 Bitova / 11 Cifre7 Bitova / 2 Cifre
234 Bitova / 10 Cifre10 Bitova / 3 Cifre
330 Bitova / 9 Cifre14 Bitova / 4 Cifre
427 Bitova / 8 Cifre17 Bitova / 5 Cifre
524 Bitova / 7 Cifre20 Bitova / 6 Cifre
620 Bitova / 6 Cifre24 Bitova / 7 Cifre

SGTIN-96 Često postavljena pitanja

  • Obaveštava sistem o nivou pakovanja oznake. Ako sistem pročita oznaku 'Case' (Filter 2), zna da sadrži više artikala. Ovo sprečava dvostruko brojanje (npr. brojanje kutije kao jedne jedinice) i omogućava validnu verifikaciju otpreme.
  • Case (Filter 2) je primarna jedinica otpreme koja se koristi za transport. Inner Pack (Filter 4) je pododeljak unutar te kutije, obično za lakšu manipulaciju ili izlaganje (kao 6 pakovanja unutar kutije od 24 limenke). Logistički sistemi prate Cases; operacije u prodavnici mogu efikasno upravljati Inner Pack-ovima.
  • Dekodiranje će propasti ili dati pogrešan barkod. Partition tačno određuje gde se završava Prefiks kompanije, a počinje Referenca artikla. Ako je ta 'tačka razdvajanja' pogrešna, dobićete drugačiji kod kompanije nego što je zamišljeno.
  • Standardni GTIN (barkod) identifikuje samo tip proizvoda (npr. '12oz Soda'). SGTIN-96 dodaje serijski broj, dajući svakoj limenci jedinstveni identitet. Ovo omogućava praćenje na nivou artikla, što vam omogućava da tačno pratite koji je konkretan artikl prodat, ukraden ili istekao.
  • Da. Kao što je prikazano u konvertoru iznad, SGTIN-96 niz sadrži kompletan GTIN-14. Uklanjanjem serijskog broja i informacija o zaglavlju, možete savršeno rekonstruisati originalni maloprodajni barkod.
  • Header (0x30) je standardni 8-bitni prefiks definisan od strane GS1. On jednostavno govori svakom RFID čitaču: "Ova oznaka je kodirana prema standardu SGTIN-96." Postoje i drugi zaglavlja za različite standarde (kao što su SSCC za palete ili GIAI za imovinu).