Engineering tools · EPC · GS1

RFID kodo konverteris

Konvertavimo įrankis tarp SGTIN-96 (RFID šešioliktainis kodas) ir Brūkšninio kodo (GTIN) + Serijos numerio. Suderinamas su standartiniais RFID skaitytuvais, tokiais kaip Zebra, Chainway, Impinj, Nextwaves. Pagrįstas GS1 EPC Tag Data Standard.

RFID konverteris

Konvertuokite tarp RFID Hex (SGTIN-96) ir GS1 brūkšninio kodo (GTIN) + serijos numerio.

Scheme:SGTIN-9696 bits / Header 0x30

Kodo logika ir žingsnis po žingsnio

// 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ūrėjo kodas

Naudokite šią programinę įrangą savo projekte. Pasirinkite kalbą žemiau.

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}

Paaiškinti

SGTIN-96 yra 96 bitų dvejetainė eilutė, padalinta į 6 dalis:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Antraštė (8 bitai)Bits 0-8 (8)
001100000x30

Standartinis prefiksas (00110000), identifikuojantis tai kaip SGTIN-96.

Filtras (3 bitų)Bits 8-11 (3)
0113

Objekto tipas (pvz., 1 = Mažmeninė prekyba). Žr. nuorodų vadovą žemiau.

Skirsnis (3 bitai)Bits 11-14 (3)
1015

Skirsnis 5 reiškia: Įmonės kodas užima 24 bitus, Produkto kodas užima 20 bitus.

Įmonės prefiksasBits 14-38 (24)
1000100001010111110000118935363

Unikalus įmonės kodas, priskirtas GS1.

Prekės nuorodaBits 38-58 (20)
00010111011001011101095837

Jūsų specifinis produkto kodas.

Serijos numeris (38 bitai)Bits 58-96 (38)
000000000000000000000000000000000000011

Unikalus kiekvieno konkretaus fizinio produkto identifikatorius.

Vizualizuojamas ryšys tarp jūsų fizinio brūkšninio kodo ir elektroninio produkto kodo (EPC).

Diagrama, rodanti ryšį tarp brūkšninio kodo (GTIN) ir SGTIN-96 URI
  1. 1 žingsnis: Nustatyti binaro antraštės reikšmę EPC schemai. Binaro antraštės reikšmė SGTIN-96 yra „00110000“.
  2. 2 žingsnis: Pasirinkti Skirsnio reikšmę pagal įmonės prefikso skaitmenų skaičių iš Skirsnio reikšmių lentelės.
  3. 3 žingsnis: Konvertuoti Filtro reikšmę, Skirsnio reikšmę, Įmonės prefiksą, Prekės nuorodą ir Serijos numerį į binaro reikšmę.
  4. 4 žingsnis: Sujungti eilės tvarka Antraštės, Filtro, Skirsnio, Įmonės prefikso, Prekės nuorodos ir Serijos numerio binaro reikšmes, kad susidarytų Binarinis EPC.

SGTIN-96 nuorodų vadovas

ReikšmėAprašymas
0Visi kiti
Naudojama prekėms, kurios netinka kitoms kategorijoms. Retai naudojama mažmeninėje prekyboje.
1Pardavimo vieta (POS) Prekybos prekė
Standartinis vartotojo vienetas, parduodamas pardavimo vietoje. Pavyzdys: vienas šampūno buteliukas.
2Pilnas transportavimo dėklas
Standartinis siuntimo vienetas, kuriame yra keli daiktai. Pavyzdys: 12 šampūno buteliukų dėžutė. Kritinis logistikai atskirti „vieną dėklą“ nuo „vieno daikto“.
3Rezervuota
Rezervuota ateičiai.
4Vidinis pakuotės prekybos prekės grupavimas
Grupavimas, mažesnis nei pilnas dėklas, dažnai skirtas lentynoms ar tvarkymui. Pavyzdys: susitraukianti 3 vienetų pakuotė pagrindinėje dėžutėje.
5Rezervuota
Rezervuota ateičiai.
6Vieneto apkrova
Didelis logistikos vienetas, paprastai padėklas, kuriame yra keli dėklai.
7Komponentas vartotojo įrenginio viduje
Konkretus komponentas vartotojo įrenginio viduje. Pavyzdys: Baterijos dangtelis žaislo viduje.
ReikšmėĮmonės prefiksasPrekės nuoroda
040 Bitai / 12 Skaitmenys4 Bitai / 1 Skaitmenys
137 Bitai / 11 Skaitmenys7 Bitai / 2 Skaitmenys
234 Bitai / 10 Skaitmenys10 Bitai / 3 Skaitmenys
330 Bitai / 9 Skaitmenys14 Bitai / 4 Skaitmenys
427 Bitai / 8 Skaitmenys17 Bitai / 5 Skaitmenys
524 Bitai / 7 Skaitmenys20 Bitai / 6 Skaitmenys
620 Bitai / 6 Skaitmenys24 Bitai / 7 Skaitmenys

SGTIN-96 Dažnai užduodami klausimai

  • Ji nurodo sistemai žymos pakavimo lygį. Jei sistema nuskaito 'Dėklo' žymą (Filtras 2), ji žino, kad joje yra keli vienetai. Tai apsaugo nuo dvigubo skaičiavimo (pvz., dėklo skaičiavimo kaip vieno vieneto) ir leidžia patikrinti siuntą.
  • Dėklas (Filtras 2) yra pagrindinis transportavimui naudojamas siuntimo vienetas. Vidinis paketas (Filtras 4) yra padalinys dėklo viduje, paprastai skirtas lengvesniam tvarkymui ar eksponavimui (pvz., 6 pakuotės 24 skardinių dėkle). Logistikos sistemos seka Dėklus; Parduotuvių operacijos gali efektyviai tvarkyti Vidinius paketus.
  • Dekodavimas nepavyks arba bus gautas neteisingas Brūkšninis kodas. Skirsnis tiksliai nustato, kur baigiasi Įmonės prefiksas ir prasideda Prekės nuoroda. Jei šis „padalijimo taškas“ yra neteisingas, gausite kitą Įmonės kodą nei numatyta.
  • Standartinis GTIN (Brūkšninis kodas) identifikuoja tik produkto tipą (pvz., '12oz Soda'). SGTIN-96 prideda Serijos numerį, suteikdama kiekvienai skardinei unikalų tapatumą. Tai leidžia sekti kiekvieną prekę, leidžiant sekti, kuri konkreti prekė buvo parduota, pavogta ar pasibaigė jos galiojimo laikas.
  • Taip. Kaip parodyta aukščiau esančiame konverteryje, SGTIN-96 eilutė apima visą GTIN-14. Pašalinę Serijos numerį ir antraštės informaciją, galite puikiai atkurti originalų mažmeninės prekybos brūkšninį kodą.
  • Antraštė (0x30) yra standartinis 8 bitų prefiksas, apibrėžtas GS1. Ji tiesiog sako bet kuriam RFID skaitytuvui: „Ši žyma užkoduota naudojant SGTIN-96 standartą.“ Yra ir kitų antraščių skirtingiems standartams (pvz., SSCC padėklams arba GIAI turtui).