Engineering tools · EPC · GS1

Convertor de Cod RFID

Instrument de conversie între SGTIN-96 (RFID Hex) și Cod de bare (GTIN) + Număr de serie. Compatibil cu cititoare RFID standard precum Zebra, Chainway, Impinj, Nextwaves. Bazat pe GS1 EPC Tag Data Standard.

Convertor RFID

Convertiți între RFID Hex (SGTIN-96) și codul de bare GS1 (GTIN) + Număr de serie.

Scheme:SGTIN-9696 bits / Header 0x30

Logica codului și instrucțiuni pas cu pas

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

Cod Dezvoltator

Utilizați această logică utilitară în proiectul dvs. Selectați o limbă mai jos.

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}

Explică

SGTIN-96 este un șir binar de 96 de biți împărțit în 6 părți:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Antet (8 biți)Bits 0-8 (8)
001100000x30

Prefix standard (00110000) care identifică acest lucru ca SGTIN-96.

Filtru (3 biți)Bits 8-11 (3)
0113

Tipul de obiect (de exemplu, 1 = Retail Retail). Consultați Ghidul de referință de mai jos.

Partiție (3 biți)Bits 11-14 (3)
1015

Partiția 5 înseamnă: Codul companiei ocupă 24 biți, Codul produsului ocupă 20 biți.

Prefix CompanieBits 14-38 (24)
1000100001010111110000118935363

Cod unic al companiei atribuit de GS1.

Referință articolBits 38-58 (20)
00010111011001011101095837

Codul specific al produsului dumneavoastră.

Număr de serie (38 biți)Bits 58-96 (38)
000000000000000000000000000000000000011

Identificator unic pentru fiecare produs fizic specific.

Vizualizarea relației dintre codul de bare fizic și codul electronic al produsului (EPC).

Diagramă care arată conexiunea dintre Codul de Bare (GTIN) și URI SGTIN-96
  1. Pasul 1: Determinați valoarea antetului binar pentru schema EPC. Valoarea antetului binar pentru SGTIN-96 este „00110000”.
  2. Pasul 2: Selectați Valoarea Partiției pe baza numărului de cifre din Prefixul Companiei din Tabelul Valorilor Partiției.
  3. Pasul 3: Convertiți Valoarea Filtrului, Valoarea Partiției, Prefixul Companiei, Referința Articolului și Numărul de serie în valoare binară.
  4. Pasul 4: Concatenati în ordine Antetul, Filtrul, Partiția, Prefixul Companiei, Referința Articolului și valorile binare ale Numărului de serie pentru a forma EPC-ul Binar.

Ghid de Referință SGTIN-96

ValoareDescriere
0Toate celelalte
Utilizat pentru articolele care nu se încadrează în alte categorii. Rareori utilizat în comerțul cu amănuntul general.
1Articol comercial de la punctul de vânzare (POS)
Unitatea standard de consum vândută la punctul de vânzare. Exemplu: O singură sticlă de șampon.
2Carcasă completă pentru transport
O unitate de expediere standard care conține mai multe articole. Exemplu: Un carton cu 12 sticle de șampon. Critic pentru logistică pentru a distinge „o carcasă” de „un articol”.
3Rezervat
Rezervat pentru utilizare viitoare.
4Gruparea articolelor comerciale din pachetul interior
O grupare mai mică decât o carcasă completă, adesea pentru afișare pe raft sau manipulare. Exemplu: Un pachet de 3 bucăți înfoliat în interiorul cartonului principal.
5Rezervat
Rezervat pentru utilizare viitoare.
6Încărcare unitate
O unitate logistică mare, de obicei un palet care conține mai multe cutii.
7Componentă în interiorul Unității de Consum
O parte specifică din interiorul unei unități de consum. Exemplu: Capacul bateriei din interiorul unei jucării.
ValoarePrefixul companieiReferința articolului
040 Biți / 12 Cifre4 Biți / 1 Cifre
137 Biți / 11 Cifre7 Biți / 2 Cifre
234 Biți / 10 Cifre10 Biți / 3 Cifre
330 Biți / 9 Cifre14 Biți / 4 Cifre
427 Biți / 8 Cifre17 Biți / 5 Cifre
524 Biți / 7 Cifre20 Biți / 6 Cifre
620 Biți / 6 Cifre24 Biți / 7 Cifre

Întrebări frecvente SGTIN-96

  • Acesta spune sistemului nivelul de ambalare al tag-ului. Dacă un sistem citește un tag 'Case' (Filtru 2), știe că acesta conține mai multe articole. Acest lucru previne dubla numărare (de exemplu, numărarea unei cutii ca o singură unitate) și permite verificarea validă a expedierii.
  • Case (Filtru 2) este unitatea principală de expediere utilizată pentru transport. Inner Pack (Filtru 4) este o subdiviziune în interiorul acelei cutii, de obicei pentru o manipulare sau afișare mai ușoară (cum ar fi un pachet de 6 în interiorul unei cutii de 24 de cutii). Sistemele logistice urmăresc Case; Operațiunile magazinului ar putea gestiona eficient Inner Packs.
  • Decodarea va eșua sau va produce codul de bare greșit. Partition determină exact unde se termină Prefixul Companiei și începe Referința Articolului. Dacă acest 'punct de separare' este greșit, veți obține un Cod de Companie diferit de cel dorit.
  • Standardul GTIN (Barcode) identifică doar tipul de produs (de exemplu, 'Soda 12oz'). SGTIN-96 adaugă un Număr de Serie, oferind fiecărei cutii o identitate unică. Acest lucru permite trasabilitatea la nivel de articol, permițându-vă să urmăriți exact ce articol specific a fost vândut, furat sau expirat.
  • Da. După cum se arată în convertorul de mai sus, șirul SGTIN-96 conține GTIN-14 complet. Prin eliminarea Numărului de Serie și a informațiilor din antet, puteți reconstrui perfect codul de bare original de vânzare cu amănuntul.
  • Header (0x30) este un prefix standard de 8 biți definit de GS1. Acesta spune pur și simplu oricărui cititor RFID: "Acest tag este codificat folosind standardul SGTIN-96." Există alte antete pentru diferite standarde (cum ar fi SSCC pentru paleți sau GIAI pentru active).