Engineering tools · EPC · GS1

RFID Kodekonverterer

Konverteringsverktøy mellom SGTIN-96 (RFID Hex) og Strekkode (GTIN) + Serienummer. Kompatibel med standard RFID-lesere som Zebra, Chainway, Impinj, Nextwaves. Basert på GS1 EPC Tag Data Standard.

RFID-konverter

Konverter mellom RFID Hex (SGTIN-96) og GS1 Strekkode (GTIN) + Serienummer.

Scheme:SGTIN-9696 bits / Header 0x30

Kodelogikk og trinn-for-trinn

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

Utviklerkode

Bruk denne verktøylogikken i prosjektet ditt. Velg et språk nedenfor.

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}

Forklar

SGTIN-96 er en 96-bit binærstreng delt inn i 6 deler:

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

Standard prefiks (00110000) som identifiserer dette som SGTIN-96.

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

Objekttype (f.eks. 1 = Retail Retail). Se Referanseveiledningen nedenfor.

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

Partisjon 5 betyr: Selskaps kode tar 24 bits, Produktkode tar 20 bits.

Firma-prefiksBits 14-38 (24)
1000100001010111110000118935363

Unik bedriftskode tildelt av GS1.

VarehenvisningBits 38-58 (20)
00010111011001011101095837

Din spesifikke produktkode.

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

Unik identifikator for hvert spesifikke fysiske produkt.

Visualisering av forholdet mellom din fysiske strekkode og den elektroniske produktkoden (EPC).

Diagram som viser sammenhengen mellom strekkode (GTIN) og SGTIN-96 URI
  1. Trinn 1: Bestem den binære topptekstverdien for EPC-skjemaet. Den binære topptekstverdien for SGTIN-96 er “00110000.”
  2. Trinn 2: Velg partisjonsverdien basert på antall sifre i selskapsprefikset fra partisjonsverditabellen.
  3. Trinn 3: Konverter filterverdien, partisjonsverdien, selskapsprefikset, varehenvisningen og serienummeret til binærverdi.
  4. Trinn 4: Sett sammen i rekkefølgen Topptekst, Filter, Partisjon, Selskapsprefiks, Varehenvisning og Serienummer binære verdier for å danne den binære EPC.

SGTIN-96 Referanseveiledning

VerdiBeskrivelse
0Alle andre
Brukes for varer som ikke passer inn i andre kategorier. Sjelden brukt i generell detaljhandel.
1Salgssted (POS) Handelsvare
Standard forbrukerenhet som selges på salgsstedet. Eksempel: En enkelt flaske sjampo.
2Full kasse for transport
En standard forsendelsesenhet som inneholder flere varer. Eksempel: En kartong med 12 sjampoflasker. Kritisk for logistikk for å skille 'en kasse' fra 'en vare'.
3Reservert
Reservert for fremtidig bruk.
4Indre pakke handelsvaregruppering
En gruppering mindre enn en full kasse, ofte for hyllevisning eller håndtering. Eksempel: En krympepakket 3-pakning inne i hovedkartongen.
5Reservert
Reservert for fremtidig bruk.
6Enhetslast
En stor logistikkenhet, typisk en pall som inneholder flere kolli.
7Komponent inne i forbrukerenhet
En spesifikk del inne i en forbrukerenhet. Eksempel: Batteridekselet inne i en leke.
VerdiBedriftsprefiksVarehenvisning
040 Biter / 12 Siffer4 Biter / 1 Siffer
137 Biter / 11 Siffer7 Biter / 2 Siffer
234 Biter / 10 Siffer10 Biter / 3 Siffer
330 Biter / 9 Siffer14 Biter / 4 Siffer
427 Biter / 8 Siffer17 Biter / 5 Siffer
524 Biter / 7 Siffer20 Biter / 6 Siffer
620 Biter / 6 Siffer24 Biter / 7 Siffer

SGTIN-96 Ofte Stilte Spørsmål

  • Den forteller systemet emballasjenivået til taggen. Hvis et system leser en 'Case'-tag (Filter 2), vet det at den inneholder flere elementer. Dette forhindrer dobbelttelling (f.eks. å telle en case som bare én enhet) og muliggjør gyldig forsendelsesverifisering.
  • Case (Filter 2) er den primære forsendelsesenheten som brukes til transport. Inner Pack (Filter 4) er en underavdeling inne i den casen, vanligvis for enklere håndtering eller visning (som en 6-pakning inne i en 24-boks case). Logistikksystemer sporer Cases; Butikkoperasjoner kan effektivt håndtere Inner Packs.
  • Dekodingen vil mislykkes eller produsere feil strekkode. Partition bestemmer nøyaktig hvor Company Prefix slutter og Item Reference begynner. Hvis dette 'split point' er feil, vil du få en annen Company Code enn tiltenkt.
  • Standard GTIN (Strekkode) identifiserer bare produkttypen (f.eks. '12oz Soda'). SGTIN-96 legger til et Serienummer, som gir hver enkelt boks en unik identitet. Dette muliggjør sporbarhet på varenivå, slik at du kan spore nøyaktig hvilken spesifikk vare som ble solgt, stjålet eller utløpt.
  • Ja. Som vist i konverteren ovenfor, inneholder SGTIN-96-strengen den komplette GTIN-14. Ved å fjerne serienummeret og hodeinformasjonen, kan du perfekt rekonstruere den originale detaljhandelsstrekkoden.
  • Header (0x30) er et standard 8-bits prefiks definert av GS1. Den forteller ganske enkelt enhver RFID-leser: "Denne taggen er kodet ved hjelp av SGTIN-96-standarden." Andre headere finnes for forskjellige standarder (som SSCC for paller eller GIAI for eiendeler).