Engineering tools · EPC · GS1

Convertidor de Código RFID

Herramienta de conversión entre SGTIN-96 (RFID Hex) y Código de Barras (GTIN) + Número de Serie. Compatible con lectores RFID estándar como Zebra, Chainway, Impinj, Nextwaves. Basado en el Estándar de Datos de Etiqueta GS1 EPC.

Convertidor RFID

Convierte entre RFID Hex (SGTIN-96) y Código de Barras GS1 (GTIN) + Número de Serie.

Scheme:SGTIN-9696 bits / Header 0x30

Lógica de Código y 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 para Desarrolladores

Use esta lógica utilitaria en su proyecto. Seleccione un idioma abajo.

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 es una cadena binaria de 96 bits dividida en 6 partes:

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

Prefijo estándar (00110000) identificando esto como SGTIN-96.

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

Tipo de objeto (ej. 1 = Venta Minorista). Vea la Guía de Referencia abajo.

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

Partición 5 significa: Código de Empresa ocupa 24 bits, Referencia de Artículo ocupa 20 bits.

Prefijo de EmpresaBits 14-38 (24)
1000100001010111110000118935363

Código único de empresa asignado por GS1.

Referencia de ArtículoBits 38-58 (20)
00010111011001011101095837

Su código de producto específico.

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

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

Visualizando la relación entre su código de barras físico y el código de producto electrónico (EPC).

Diagrama mostrando conexión entre Código de Barras (GTIN) y URI SGTIN-96
  1. Paso 1: Determine el valor de header binario para el esquema EPC. El valor de header binario para SGTIN-96 es "00110000".
  2. Paso 2: Seleccione el Valor de Partición basado en el número de dígitos en el Prefijo de Empresa de la Tabla de Valores de Partición.
  3. Paso 3: Convierta el Valor de Filtro, Valor de Partición, Prefijo de Empresa, Referencia de Artículo y # de Serie a valor binario.
  4. Paso 4: Concatene en orden Header, Filtro, Partición, Prefijo de Empresa, Referencia de Artículo y valores binarios de # de Serie para formar el EPC Binario.

Guía de Referencia SGTIN-96

ValorDescripción
0Todos los Demás
Usado para artículos que no encajan en otras categorías. Raramente usado en retail general.
1Artículo Comercial en Punto de Venta (POS)
La unidad de consumo estándar vendida en Punto de Venta. Ejemplo: Una botella individual de champú.
2Caja Completa para Transporte
Una unidad de envío estándar conteniendo múltiples artículos. Ejemplo: Un cartón de 12 botellas de champú. Crítico para logística para distinguir 'una caja' de 'un artículo'.
3Reservado
Reservado para uso futuro.
4Agrupación de Artículo Comercial de Paquete Interior
Una agrupación más pequeña que una caja completa, a menudo para exhibición en estante o manejo. Ejemplo: Un paquete de 3 envuelto en plástico dentro del cartón principal.
5Reservado
Reservado para uso futuro.
6Carga Unitaria
Una unidad logística grande, típicamente un pallet conteniendo múltiples cajas.
7Componente dentro de Unidad de Consumo
Una parte específica dentro de una unidad de consumo. Ejemplo: La tapa de batería dentro de un juguete.
ValorPrefijo de EmpresaReferencia de Artículo
040 Bits / 12 Dígitos4 Bits / 1 Dígitos
137 Bits / 11 Dígitos7 Bits / 2 Dígitos
234 Bits / 10 Dígitos10 Bits / 3 Dígitos
330 Bits / 9 Dígitos14 Bits / 4 Dígitos
427 Bits / 8 Dígitos17 Bits / 5 Dígitos
524 Bits / 7 Dígitos20 Bits / 6 Dígitos
620 Bits / 6 Dígitos24 Bits / 7 Dígitos

Preguntas Frecuentes sobre SGTIN-96

  • Le dice al sistema el nivel de empaque de la etiqueta. Si un sistema lee una etiqueta de 'Caja' (Filtro 2), sabe que contiene múltiples artículos. Esto previene el doble conteo (ej., contar una caja como una sola unidad) y permite verificación de envío válida.
  • Caja (Filtro 2) es la unidad de envío primaria usada para transporte. Paquete Interior (Filtro 4) es una subdivisión dentro de esa caja, usualmente para manejo o exhibición más fácil (como un paquete de 6 dentro de una caja de 24 latas). Los sistemas logísticos rastrean Cajas; Las operaciones de tienda podrían manejar eficientemente Paquetes Interiores.
  • La decodificación fallará o producirá el Código de Barras incorrecto. La Partición determina exactamente dónde termina el Prefijo de Empresa y dónde comienza la Referencia de Artículo. Si este 'punto de división' es incorrecto, obtendrá un Código de Empresa diferente al pretendido.
  • El GTIN estándar (Código de Barras) solo identifica el tipo de producto (ej., 'Refresco de 12oz'). SGTIN-96 añade un Número de Serie, dando a cada unidad una identidad única. Esto habilita trazabilidad a nivel de artículo, permitiéndole rastrear exactamente qué artículo específico fue vendido, robado o expirado.
  • Sí. Como se muestra en el convertidor de arriba, la cadena SGTIN-96 contiene el GTIN-14 completo. Al remover el Número de Serie y la información de header, puede reconstruir perfectamente el código de barras retail original.
  • El Header (0x30) es un prefijo estándar de 8 bits definido por GS1. Simplemente le dice a cualquier lector RFID: "Esta etiqueta está codificada usando el estándar SGTIN-96." Existen otros headers para diferentes estándares (como SSCC para pallets o GIAI para activos).