Engineering tools · EPC · GS1

Convertedor de Código RFID

Ferramenta de conversión entre SGTIN-96 (RFID Hex) e Código de barras (GTIN) + Número de serie. Compatible con lectores RFID estándar como Zebra, Chainway, Impinj, Nextwaves. Baseado en GS1 EPC Tag Data Standard.

Convertedor RFID

Converter entre RFID Hex (SGTIN-96) e código de barras GS1 (GTIN) + número de serie.

Scheme:SGTIN-9696 bits / Header 0x30

Lóxica de código e paso a paso

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

Código de desenvolvedor

Utilice esta lóxica utilitaria no seu proxecto. Seleccione un idioma a continuación.

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}

Explicar

SGTIN-96 é unha cadea binaria de 96 bits dividida en 6 partes:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Cabeceira (8 bits)Bits 0-8 (8)
001100000x30

Prefixo estándar (00110000) que identifica isto como SGTIN-96.

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

Tipo de obxecto (p.ex. 1 = Retail Retail). Consulte a Guía de Referencia a continuación.

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

A partición 5 significa: o Código da Empresa ocupa 24 bits, o Código do Produto ocupa 20 bits.

Prefixo da empresaBits 14-38 (24)
1000100001010111110000118935363

Código de empresa único asignado por GS1.

Referencia do ArtigoBits 38-58 (20)
00010111011001011101095837

O código específico do seu produto.

Número de Serie (38 bits)Bits 58-96 (38)
000000000000000000000000000000000000011

Identificador único para cada produto físico específico.

Visualizando a relación entre o teu código de barras físico e o código de produto electrónico (EPC).

Diagrama que mostra a conexión entre o Código de Barras (GTIN) e o URI SGTIN-96
  1. Paso 1: Determine o valor da cabeceira binaria para o esquema EPC. O valor da cabeceira binaria para SGTIN-96 é “00110000.”
  2. Paso 2: Seleccione o Valor de Partición baseado no número de díxitos do Prefixo da Empresa a partir da Táboa de Valores de Partición.
  3. Paso 3: Converta o Valor do Filtro, Valor de Partición, Prefixo da Empresa, Referencia do Artigo e Nº de Serie a valor binario.
  4. Paso 4: Concatenar en orde Cabeceira, Filtro, Partición, Prefixo da Empresa, Referencia do Artigo e valores binarios do Nº de Serie para formar o EPC binario.

Guía de Referencia SGTIN-96

ValorDescrición
0Todos os Demais
Utilizado para artigos que non se encaixan en outras categorías. Raramente usado no comercio minorista xeral.
1Artigo Comercial de Punto de Venda (POS)
A unidade de consumo estándar vendida no Punto de Venda. Exemplo: Unha única botella de champú.
2Caixa Completa para Transporte
Unha unidade de envío estándar que contén varios artigos. Exemplo: Un cartón de 12 botellas de champú. Crucial para a loxística distinguir 'unha caixa' de 'un artigo'.
3Reservado
Reservado para uso futuro.
4Agrupamento de Artigos Comerciais de Paquete Interno
Un agrupamento máis pequeno que unha caixa completa, a miúdo para exposición en anaís ou manipulación. Exemplo: Un paquete de 3 unidades envuelto en película termoencogible dentro do cartón principal.
5Reservado
Reservado para uso futuro.
6Carga de unidade
Unha gran unidade loxística, normalmente un palete que contén múltiples caixas.
7Compoñente dentro da unidade de consumo
Unha peza específica dentro dunha unidade de consumo. Exemplo: A tapa da batería dentro dun xoguete.
ValorPrefixo da empresaReferencia do artigo
040 Bits / 12 Díxitos4 Bits / 1 Díxitos
137 Bits / 11 Díxitos7 Bits / 2 Díxitos
234 Bits / 10 Díxitos10 Bits / 3 Díxitos
330 Bits / 9 Díxitos14 Bits / 4 Díxitos
427 Bits / 8 Díxitos17 Bits / 5 Díxitos
524 Bits / 7 Díxitos20 Bits / 6 Díxitos
620 Bits / 6 Díxitos24 Bits / 7 Díxitos

Preguntas frecuentes sobre SGTIN-96

  • Indica ao sistema o nivel de embalaxe da etiqueta. Se un sistema le unha etiqueta 'Case' (Filtro 2), sabe que contén varios artigos. Isto evita o dobre recuento (p.ex., contar unha caixa como unha única unidade) e permite unha verificación de envío válida.
  • Case (Filtro 2) é a unidade principal de envío utilizada para o transporte. Inner Pack (Filtro 4) é unha subdivisión dentro desa caixa, normalmente para facilitar o manexo ou a exposición (como un paquete de 6 dentro dunha caixa de 24 latas). Os sistemas logísticos rastrexan Cases; as operacións da tenda poden xestionar eficientemente Inner Packs.
  • A decodificación fallará ou producirá un código de barras incorrecto. O Partition determina exactamente onde termina o Prefixo da Empresa e onde comeza a Referencia do Artigo. Se este 'punto de división' está errado, obterá un Código de Empresa diferente ao previsto.
  • O GTIN estándar (código de barras) só identifica o tipo de produto (p.ex., 'Soda de 12 oz'). O SGTIN-96 engade un Número de serie, proporcionando a cada lata unha identidade única. Isto permite rastrexabilidade a nivel de artigo, permitindo rastrexar exactamente que artigo específico foi vendido, roubado ou caducou.
  • Sí. Como se mostra no conversor anterior, a cadea SGTIN-96 contén o GTIN-14 completo. Eliminando o Número de serie e a información da cabeceira, pode reconstruír perfectamente o código de barras minorista orixinal.
  • O Header (0x30) é un prefixo estándar de 8 bits definido por GS1. Simplemente indica a calquera lector RFID: "Esta etiqueta está codificada segundo o estándar SGTIN-96." Existen outras cabeceiras para diferentes estándares (como SSCC para paletes ou GIAI para activos).