Engineering tools · EPC · GS1

RFID‑kodkonverterare

Konverteringsverktyg mellan SGTIN-96 (RFID Hex) och Streckkod (GTIN) + Serienummer. Kompatibel med standard RFID-läsare som Zebra, Chainway, Impinj, Nextwaves. Baserad på GS1 EPC Tag Data Standard.

RFID‑konverterare

Konvertera mellan RFID Hex (SGTIN-96) och GS1-streckkod (GTIN) + serienummer.

Scheme:SGTIN-9696 bits / Header 0x30

Kodlogik & Steg‑för‑steg

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

Utvecklarkod

Använd denna verktygslogik i ditt projekt. Välj ett språk nedan.

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}

Förklara

SGTIN-96 är en 96-bitars binär sträng uppdelad i 6 delar:

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

Standardprefix (00110000) som identifierar detta som SGTIN-96.

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

Objekttyp (t.ex. 1 = Retail Retail). Se referensguide nedan.

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

Partition 5 betyder: Företagskod tar 24 bitar, Produktkod tar 20 bitar.

FöretagsprefixBits 14-38 (24)
1000100001010111110000118935363

Unik företagskod tilldelad av GS1.

ArtikelreferensBits 38-58 (20)
00010111011001011101095837

Din specifika produktkod.

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

Unik identifierare för varje specifik fysisk produkt.

Visualisering av förhållandet mellan din fysiska streckkod och den elektroniska produktkoden (EPC).

Diagram som visar kopplingen mellan streckkod (GTIN) och SGTIN-96 URI
  1. Steg 1: Bestäm det binära huvudvärdet för EPC-schemat. Det binära huvudvärdet för SGTIN-96 är “00110000.”
  2. Steg 2: Välj partitionsvärdet baserat på antalet siffror i företagsprefixet från tabellen för partitionsvärden.
  3. Steg 3: Konvertera filtervärdet, partitionsvärdet, företagsprefixet, artikelreferensen och serienummer # till binärt värde.
  4. Steg 4: Konkatenera i ordning Header, Filter, Partition, Företagsprefix, Artikelreferens och Serienummer # binära värden för att bilda den binära EPC:n.

SGTIN-96 Referensguide

VärdeBeskrivning
0Alla andra
Används för artiklar som inte passar in i andra kategorier. Sällan använt i allmän detaljhandel.
1Point of Sale (POS) handelsartikel
Den standardkonsumentenhet som säljs i kassan. Exempel: En flaska schampo.
2Full låda för transport
En standard fraktenhet som innehåller flera artiklar. Exempel: En kartong med 12 schampoflaskor. Kritisk för logistik att särskilja 'en låda' från 'en artikel'.
3Reserverad
Reserverad för framtida användning.
4Gruppering av innerförpackningens handelsartikel
En gruppering som är mindre än en hel kartong, ofta för hyllvisning eller hantering. Exempel: Ett krympförpackat 3-pack inuti huvudkartongen.
5Reserverad
Reserverad för framtida bruk.
6Enhetslast
En stor logistisk enhet, vanligtvis en pall som innehåller flera kartonger.
7Komponent i konsumentenhet
En specifik del i en konsumentenhet. Exempel: Batterilocket i en leksak.
VärdeFöretagsprefixArtikelreferens
040 Bitar / 12 Siffror4 Bitar / 1 Siffror
137 Bitar / 11 Siffror7 Bitar / 2 Siffror
234 Bitar / 10 Siffror10 Bitar / 3 Siffror
330 Bitar / 9 Siffror14 Bitar / 4 Siffror
427 Bitar / 8 Siffror17 Bitar / 5 Siffror
524 Bitar / 7 Siffror20 Bitar / 6 Siffror
620 Bitar / 6 Siffror24 Bitar / 7 Siffror

SGTIN-96 Vanliga frågor

  • Det informerar systemet om förpackningsnivå för taggen. Om ett system läser en 'Case'-tagg (Filter 2) vet det att den innehåller flera artiklar. Detta förhindrar dubbelräkning (t.ex. att räkna en låda som bara en enhet) och möjliggör giltig leveransverifiering.
  • Case (Filter 2) är den primära fraktenheten som används för transport. Inner Pack (Filter 4) är en underindelning i den lådan, vanligtvis för enklare hantering eller display (t.ex. ett 6-pack i en 24‑burk låda). Logistiksystem spårar Cases; butikens drift kan effektivt hantera Inner Packs.
  • Avkodningen kommer att misslyckas eller producera fel streckkod. Partition bestämmer exakt var Företagsprefixet slutar och Artikelreferensen börjar. Om denna 'delningspunkt' är fel får du en annan företagskod än avsedd.
  • Standard GTIN (streckkod) identifierar endast produkttyp (t.ex. '12 oz läsk'). SGTIN-96 lägger till ett serienummer, vilket ger varje enskild burk en unik identitet. Detta möjliggör spårning på artikelnivå, så att du exakt kan följa vilken specifik vara som såldes, stals eller gick ut.
  • Ja. Som visas i konverteraren ovan innehåller SGTIN-96-strängen hela GTIN-14. Genom att ta bort serienumret och headerinformationen kan du exakt återkonstruera den ursprungliga detaljhandelsstreckkoden.
  • Header (0x30) är ett standard 8-bitars prefix definierat av GS1. Det talar helt enkelt till alla RFID-läsare: "Denna tagg är kodad enligt SGTIN-96-standarden." Andra headers finns för olika standarder (t.ex. SSCC för pallar eller GIAI för tillgångar).