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
EPC URIs
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)
001100000x30Standardprefix (00110000) som identifierar detta som SGTIN-96.
Filter (3 bit)Bits 8-11 (3)
0113Objekttyp (t.ex. 1 = Retail Retail). Se referensguide nedan.
Partition (3 bit)Bits 11-14 (3)
1015Partition 5 betyder: Företagskod tar 24 bitar, Produktkod tar 20 bitar.
FöretagsprefixBits 14-38 (24)
1000100001010111110000118935363Unik företagskod tilldelad av GS1.
ArtikelreferensBits 38-58 (20)
00010111011001011101095837Din specifika produktkod.
Serienummer (38 bit)Bits 58-96 (38)
000000000000000000000000000000000000011Unik identifierare för varje specifik fysisk produkt.
Förstå SGTIN & GTIN
Visualisering av förhållandet mellan din fysiska streckkod och den elektroniska produktkoden (EPC).

Kodningslogik (Steg-för-steg)
- Steg 1: Bestäm det binära huvudvärdet för EPC-schemat. Det binära huvudvärdet för SGTIN-96 är “00110000.”
- Steg 2: Välj partitionsvärdet baserat på antalet siffror i företagsprefixet från tabellen för partitionsvärden.
- Steg 3: Konvertera filtervärdet, partitionsvärdet, företagsprefixet, artikelreferensen och serienummer # till binärt värde.
- 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ärde | Beskrivning |
|---|---|
| 0 | Alla andra Används för artiklar som inte passar in i andra kategorier. Sällan använt i allmän detaljhandel. |
| 1 | Point of Sale (POS) handelsartikel Den standardkonsumentenhet som säljs i kassan. Exempel: En flaska schampo. |
| 2 | Full 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'. |
| 3 | Reserverad Reserverad för framtida användning. |
| 4 | Gruppering 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. |
| 5 | Reserverad Reserverad för framtida bruk. |
| 6 | Enhetslast En stor logistisk enhet, vanligtvis en pall som innehåller flera kartonger. |
| 7 | Komponent i konsumentenhet En specifik del i en konsumentenhet. Exempel: Batterilocket i en leksak. |
| Värde | Företagsprefix | Artikelreferens |
|---|---|---|
| 0 | 40 Bitar / 12 Siffror | 4 Bitar / 1 Siffror |
| 1 | 37 Bitar / 11 Siffror | 7 Bitar / 2 Siffror |
| 2 | 34 Bitar / 10 Siffror | 10 Bitar / 3 Siffror |
| 3 | 30 Bitar / 9 Siffror | 14 Bitar / 4 Siffror |
| 4 | 27 Bitar / 8 Siffror | 17 Bitar / 5 Siffror |
| 5 | 24 Bitar / 7 Siffror | 20 Bitar / 6 Siffror |
| 6 | 20 Bitar / 6 Siffror | 24 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).