Engineering tools · EPC · GS1

RFID-codeconverter

Conversietool tussen SGTIN-96 (RFID Hex) en Barcode (GTIN) + Serienummer. Compatibel met standaard RFID-lezers zoals Zebra, Chainway, Impinj, Nextwaves. Gebaseerd op GS1 EPC Tag Data Standard.

RFID-converter

Converteer tussen RFID Hex (SGTIN-96) en GS1 Barcode (GTIN) + Serienummer.

Scheme:SGTIN-9696 bits / Header 0x30

Code Logica & Stapsgewijs

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

Ontwikkelaarscode

Gebruik deze hulpprogramma-logica in uw project. Selecteer hieronder een taal.

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}

Uitleg

SGTIN-96 is een 96-bits binaire string verdeeld in 6 delen:

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

Standaard prefix (00110000) die dit identificeert als SGTIN-96.

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

Objecttype (bijv. 1 = Retail Retail). Zie Referentiegids hieronder.

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

Partition 5 betekent: Company Code neemt 24 bits in beslag, Product Code neemt 20 bits in beslag.

BedrijfsvoorvoegselBits 14-38 (24)
1000100001010111110000118935363

Unieke bedrijfscode toegewezen door GS1.

ArtikelreferentieBits 38-58 (20)
00010111011001011101095837

Uw specifieke productcode.

Serienummer (38 bit)Bits 58-96 (38)
000000000000000000000000000000000000011

Unieke identificatie voor elk specifiek fysiek product.

Visualiseert de relatie tussen uw fysieke barcode en de Electronic Product Code (EPC).

Diagram met de verbinding tussen Barcode (GTIN) en SGTIN-96 URI
  1. Stap 1: Bepaal de binaire headerwaarde voor het EPC-schema. De binaire headerwaarde voor SGTIN-96 is “00110000.”
  2. Stap 2: Selecteer de Partition Value op basis van het aantal cijfers in de Company Prefix uit de Partition Value Table.
  3. Stap 3: Converteer de Filter Value, Partition Value, Company Prefix, Item Reference en Serial # naar binaire waarde.
  4. Stap 4: Voeg in volgorde Header, Filter, Partition, Company Prefix, Item Reference en Serial # binaire waarden samen om de Binary EPC te vormen.

SGTIN-96 Referentiegids

WaardeBeschrijving
0Alle Overige
Gebruikt voor artikelen die niet in andere categorieën passen. Wordt zelden gebruikt in de algemene detailhandel.
1Point of Sale (POS) Handelsartikel
De standaard consumenteneenheid die wordt verkocht bij Point of Sale. Voorbeeld: Een enkele fles shampoo.
2Volle Doos voor Transport
Een standaard verzendeenheid met meerdere artikelen. Voorbeeld: Een doos met 12 flessen shampoo. Cruciaal voor logistiek om 'één doos' te onderscheiden van 'één artikel'.
3Gereserveerd
Gereserveerd voor toekomstig gebruik.
4Inner Pack Handelsartikel Groepering
Een groepering kleiner dan een volle doos, vaak voor schapdisplay of handling. Voorbeeld: Een krimpverpakte 3-pack in de hoofddoos.
5Gereserveerd
Gereserveerd voor toekomstig gebruik.
6Unit Load
Een grote logistieke eenheid, meestal een pallet met meerdere dozen.
7Component in Consumenteneenheid
Een specifiek onderdeel in een consumenteneenheid. Voorbeeld: Het batterijklepje in een speelgoed.
WaardeBedrijfsprefixArtikelreferentie
040 Bits / 12 Cijfers4 Bits / 1 Cijfers
137 Bits / 11 Cijfers7 Bits / 2 Cijfers
234 Bits / 10 Cijfers10 Bits / 3 Cijfers
330 Bits / 9 Cijfers14 Bits / 4 Cijfers
427 Bits / 8 Cijfers17 Bits / 5 Cijfers
524 Bits / 7 Cijfers20 Bits / 6 Cijfers
620 Bits / 6 Cijfers24 Bits / 7 Cijfers

SGTIN-96 Veelgestelde Vragen

  • Het vertelt het systeem het verpakkingsniveau van de tag. Als een systeem een 'Case'-tag (Filter 2) leest, weet het dat deze meerdere items bevat. Dit voorkomt dubbel tellen (bijv. een case tellen als slechts één enkele eenheid) en maakt geldige verzendverificatie mogelijk.
  • Case (Filter 2) is de primaire verzendeenheid die wordt gebruikt voor transport. Inner Pack (Filter 4) is een onderverdeling binnen die case, meestal voor eenvoudigere hantering of weergave (zoals een 6-pack in een 24-blikjes case). Logistieke systemen volgen Cases; Winkelactiviteiten kunnen Inner Packs efficiënt afhandelen.
  • Het decoderen mislukt of produceert de verkeerde streepjescode. De Partition bepaalt precies waar de Company Prefix eindigt en de Item Reference begint. Als dit 'splitsingspunt' verkeerd is, krijgt u een andere Company Code dan bedoeld.
  • Standaard GTIN (Barcode) identificeert alleen het producttype (bijv. '12oz Soda'). SGTIN-96 voegt een Serienummer toe, waardoor elk afzonderlijk blikje een unieke identiteit krijgt. Dit maakt traceerbaarheid op itemniveau mogelijk, waardoor u precies kunt volgen welk specifiek item is verkocht, gestolen of verlopen.
  • Ja. Zoals getoond in de converter hierboven, bevat de SGTIN-96-string de complete GTIN-14. Door het serienummer en de headerinformatie te verwijderen, kunt u de originele retail barcode perfect reconstrueren.
  • De Header (0x30) is een standaard 8-bits prefix gedefinieerd door GS1. Het vertelt elke RFID-lezer simpelweg: "Deze tag is gecodeerd met behulp van de SGTIN-96-standaard." Er bestaan andere headers voor verschillende standaarden (zoals SSCC voor pallets of GIAI voor activa).