Engineering tools · EPC · GS1

Convertidor de codi RFID

Eina de conversió entre SGTIN-96 (Hex RFID) i Codi de barres (GTIN) + Número de sèrie. Compatible amb lectors RFID estàndard com Zebra, Chainway, Impinj, Nextwaves. Basat en el Estàndard de dades d'etiqueta GS1 EPC.

Convertidor RFID

Converteix entre RFID Hex (SGTIN-96) i codi de barres GS1 (GTIN) + Número de sèrie.

Scheme:SGTIN-9696 bits / Header 0x30

Lògica del codi i pas a 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

Codi per a desenvolupadors

Utilitzeu aquesta lògica d'utilitat al vostre projecte. Seleccioneu un llenguatge a continuació.

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}

Explicació

SGTIN-96 és una cadena binària de 96 bits dividida en 6 parts:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Capçalera (8 bits)Bits 0-8 (8)
001100000x30

Prefix estàndard (00110000) que identifica això com SGTIN-96.

Filtre (3 bits)Bits 8-11 (3)
0113

Tipus d'objecte (p. ex. 1 = Producte de venda al detall). Vegeu la guia de referència a continuació.

Partició (3 bits)Bits 11-14 (3)
1015

Partició 5 significa: El codi d'empresa ocupa 24 bits, El codi de producte ocupa 20 bits.

Prefix d'empresaBits 14-38 (24)
1000100001010111110000118935363

Codi d'empresa únic assignat per GS1.

Referència d'articleBits 38-58 (20)
00010111011001011101095837

El vostre codi de producte específic.

Número de sèrie (38 bits)Bits 58-96 (38)
000000000000000000000000000000000000011

Identificador únic per a cada producte físico específic.

Visualitzant la relació entre el vostre codi de barres físico i el codi de producte electrònic (EPC).

Diagrama mostrant la connexió entre codi de barres (GTIN) i SGTIN-96 URI
  1. Pas 1: Determineu el valor de capçalera binària per a l'esquema EPC. El valor de capçalera binària per a SGTIN-96 és "00110000".
  2. Pas 2: Seleccioneu el valor de partició basat en el nombre de dígits del prefix d'empresa des de la taula de valors de partició.
  3. Pas 3: Convertiu el valor de filtre, valor de partició, prefix d'empresa, referència d'article i número de sèrie a valor binari.
  4. Pas 4: Concatenau en ordre els valors binaris de capçalera, filtre, partició, prefix d'empresa, referència d'article i número de sèrie per formar l'EPC binari.

Guia de referència SGTIN-96

ValorDescripció
0Altres
Utilitzat per a articles que no encaixen en altres categories. Rarament utilitzat en venda al detall general.
1Article de punt de venda (POS)
La unitat de consum estàndard venuda al punt de venda. Exemple: Una ampolla de xampú individual.
2Caixa completa per a transport
Una unitat d'enviament estàndard que conté múltiples articles. Exemple: Un cartró de 12 ampolles de xampú. Crític per a logística per distingir 'una caixa' d''un article'.
3Reservat
Reservat per a ús futur.
4Agrupació d'interior de paquet
Una agrupació més petita que una caixa completa, sovint per a exhibició o manipulació. Exemple: Un paquet de 3 unitats embolicades amb plàstic dins del cartró principal.
5Reservat
Reservat per a ús futur.
6Càrrega unitària
Una unitat logística gran, típicament un palet que conté múltiples caixes.
7Component dins d'unitat de consum
Una part específica dins d'una unitat de consum. Exemple: La tapa de bateria dins d'una joguina.
ValorPrefix d'empresaReferència d'article
040 Bits / 12 Dígits4 Bits / 1 Dígits
137 Bits / 11 Dígits7 Bits / 2 Dígits
234 Bits / 10 Dígits10 Bits / 3 Dígits
330 Bits / 9 Dígits14 Bits / 4 Dígits
427 Bits / 8 Dígits17 Bits / 5 Dígits
524 Bits / 7 Dígits20 Bits / 6 Dígits
620 Bits / 6 Dígits24 Bits / 7 Dígits

Preguntes frequients sobre SGTIN-96

  • Indica al sistema el nivell d'embalatge de l'etiqueta. Si un sistema llegeix una etiqueta de 'Caixa' (Filtre 2), sap que conté múltiples articles. Això evita el recompte doble (p. ex., comptar una caixa com una sola unitat) i permet la verificació d'enviament vàlida.
  • Caixa (Filtre 2) és la unitat d'enviament principal utilitzada per al transport. Paquet interior (Filtre 4) és una subdivisió dins d'aquesta caixa, usualment per a manipulació o exhibició més fàcil (com un paquet de 6 dins d'una caixa de 24). Els sistemes de logística fan seguiment de caixes; Les operacions de botiga poden gestionar eficientment paquets interiors.
  • La decodificació fallarà o produirà el codi de barres equivocat. La Partició determina exactament on acaba el prefix d'empresa i on comença la referència d'article. Si aquest 'punt de divisió' és incorrecte, obtindreu un codi d'empresa diferent del previst.
  • El GTIN estàndard (codi de barres) només identifica el tipus de producte (p. ex., 'Refresc de 330ml'). SGTIN-96 afegeix un número de sèrie, donant a cada llauna una identitat única. Això permet la traçabilitat a nivell d'article, permetent-vos fer seguiment exacte de quin article específic va ser venut, robat o caducat.
  • Sí. Com es mostra al convertidor anterior, la cadena SGTIN-96 conté el GTIN-14 complet. Eliminant el número de sèrie i la informació de capçalera, podeu reconstruir perfectament el codi de barres de venda al detall original.
  • La Capçalera (0x30) és un prefix estàndard de 8 bits definit per GS1. Simplement diu a qualsevol lector RFID: "Aquesta etiqueta està codificada utilitzant l'estàndard SGTIN-96." Altres capçaleres existeixen per a diferents estàndards (com SSCC per a palets o GIAI per a actius).