Engineering tools · EPC · GS1

Convertitore di codici RFID

Strumento di conversione tra SGTIN-96 (esadecimale RFID) e Codice a barre (GTIN) + Numero di serie. Compatibile con lettori RFID standard come Zebra, Chainway, Impinj, Nextwaves. Basato su GS1 EPC Tag Data Standard.

Convertitore RFID

Converti tra RFID Hex (SGTIN-96) e Codice a barre GS1 (GTIN) + Numero di Serie.

Scheme:SGTIN-9696 bits / Header 0x30

Logica del Codice e Procedura Passo-Passo

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

Codice Sviluppatore

Utilizza questa logica di utilità nel tuo progetto. Seleziona una lingua di seguito.

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}

Spiega

SGTIN-96 è una stringa binaria a 96 bit divisa in 6 parti:

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

Prefisso standard (00110000) che lo identifica come SGTIN-96.

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

Tipo di oggetto (ad esempio, 1 = Dettaglio Dettaglio). Vedere la Guida di riferimento di seguito.

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

Partizione 5 significa: il codice azienda occupa 24 bit, il codice prodotto occupa 20 bit.

Prefisso AziendaBits 14-38 (24)
1000100001010111110000118935363

Codice azienda univoco assegnato da GS1.

Riferimento ArticoloBits 38-58 (20)
00010111011001011101095837

Il codice prodotto specifico.

Numero di Serie (38 bit)Bits 58-96 (38)
000000000000000000000000000000000000011

Identificatore univoco per ogni singolo prodotto fisico.

Visualizzazione della relazione tra il codice a barre fisico e il codice prodotto elettronico (EPC).

Diagramma che mostra la connessione tra il codice a barre (GTIN) e l'URI SGTIN-96
  1. Passaggio 1: Determinare il valore dell'intestazione binaria per lo schema EPC. Il valore dell'intestazione binaria per SGTIN-96 è “00110000.”
  2. Passaggio 2: Selezionare il valore di partizione in base al numero di cifre nel prefisso aziendale dalla tabella dei valori di partizione.
  3. Passaggio 3: Convertire il valore del filtro, il valore di partizione, il prefisso aziendale, il riferimento articolo e il numero di serie in valore binario.
  4. Passaggio 4: Concatenare in ordine le intestazioni, il filtro, la partizione, il prefisso aziendale, il riferimento articolo e i valori binari del numero di serie per formare l'EPC binario.

Guida di riferimento SGTIN-96

ValoreDescrizione
0Tutti gli Altri
Utilizzato per articoli che non rientrano in altre categorie. Raramente utilizzato nella vendita al dettaglio in generale.
1Articolo Commerciale Punto Vendita (POS)
L'unità di consumo standard venduta al Punto Vendita. Esempio: una singola bottiglia di shampoo.
2Cassa Completa per il Trasporto
Un'unità di spedizione standard contenente più articoli. Esempio: un cartone di 12 bottiglie di shampoo. Fondamentale per la logistica per distinguere 'una cassa' da 'un articolo'.
3Riservato
Riservato per uso futuro.
4Raggruppamento Articoli Commerciali per Confezione Interna
Un raggruppamento più piccolo di una cassa completa, spesso per l'esposizione sugli scaffali o la gestione. Esempio: un pacco da 3 pezzi termoretraibile all'interno del cartone principale.
5Riservato
Riservato per uso futuro.
6Carico Unitario
Una grande unità logistica, tipicamente un pallet contenente più colli.
7Componente all'interno dell'Unità di Consumo
Una parte specifica all'interno di un'unità di consumo. Esempio: il coperchio della batteria all'interno di un giocattolo.
ValorePrefisso AziendaleRiferimento Articolo
040 Bit / 12 Cifre4 Bit / 1 Cifre
137 Bit / 11 Cifre7 Bit / 2 Cifre
234 Bit / 10 Cifre10 Bit / 3 Cifre
330 Bit / 9 Cifre14 Bit / 4 Cifre
427 Bit / 8 Cifre17 Bit / 5 Cifre
524 Bit / 7 Cifre20 Bit / 6 Cifre
620 Bit / 6 Cifre24 Bit / 7 Cifre

Domande frequenti su SGTIN-96

  • Indica al sistema il livello di imballaggio del tag. Se un sistema legge un tag 'Caso' (Filtro 2), sa che contiene più articoli. Ciò impedisce il conteggio doppio (ad esempio, contare un caso come una singola unità) e consente una verifica di spedizione valida.
  • Caso (Filtro 2) è l'unità di spedizione principale utilizzata per il trasporto. Confezione interna (Filtro 4) è una suddivisione all'interno di quel caso, solitamente per una gestione o un'esposizione più semplice (come un pacco da 6 all'interno di un caso da 24 lattine). I sistemi logistici tracciano i Casi; le operazioni del negozio potrebbero gestire in modo efficiente le Confezioni interne.
  • La decodifica fallirà o produrrà il codice a barre errato. La Partizione determina esattamente dove termina il Prefisso Aziendale e inizia il Riferimento Articolo. Se questo 'punto di divisione' è errato, otterrai un Codice Azienda diverso da quello previsto.
  • Il GTIN standard (Codice a barre) identifica solo il tipo di prodotto (ad esempio, 'Soda da 12 once'). SGTIN-96 aggiunge un Numero di serie, dando a ogni singola lattina un'identità unica. Ciò consente la tracciabilità a livello di articolo, consentendoti di tenere traccia di quale articolo specifico è stato venduto, rubato o scaduto.
  • Sì. Come mostrato nel convertitore sopra, la stringa SGTIN-96 contiene il GTIN-14 completo. Rimuovendo il Numero di serie e le informazioni di intestazione, puoi ricostruire perfettamente il codice a barre originale al dettaglio.
  • L'intestazione (0x30) è un prefisso standard a 8 bit definito da GS1. Dice semplicemente a qualsiasi lettore RFID: "Questo tag è codificato utilizzando lo standard SGTIN-96." Esistono altre intestazioni per standard diversi (come SSCC per pallet o GIAI per asset).