RFID Kodekonverterer
RFID-konverter
Konverter mellom RFID Hex (SGTIN-96) og GS1 Strekkode (GTIN) + Serienummer.
EPC URIs
Kodelogikk og trinn-for-trinn
// 1. Binary Conversion
// 2. Extract Fields (Bit Slice)
// 3. Determine Partition Rule (Partition 5)
// 4. Extract Company, Item & Serial
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:
001100000x30Standard prefiks (00110000) som identifiserer dette som SGTIN-96.
0113Objekttype (f.eks. 1 = Retail Retail). Se Referanseveiledningen nedenfor.
1015Partisjon 5 betyr: Selskaps kode tar 24 bits, Produktkode tar 20 bits.
1000100001010111110000118935363Unik bedriftskode tildelt av GS1.
00010111011001011101095837Din spesifikke produktkode.
000000000000000000000000000000000000011Unik identifikator for hvert spesifikke fysiske produkt.
Forståelse av SGTIN & GTIN
Visualisering av forholdet mellom din fysiske strekkode og den elektroniske produktkoden (EPC).

Kodingslogikk (trinn-for-trinn)
- Trinn 1: Bestem den binære topptekstverdien for EPC-skjemaet. Den binære topptekstverdien for SGTIN-96 er “00110000.”
- Trinn 2: Velg partisjonsverdien basert på antall sifre i selskapsprefikset fra partisjonsverditabellen.
- Trinn 3: Konverter filterverdien, partisjonsverdien, selskapsprefikset, varehenvisningen og serienummeret til binærverdi.
- 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
| Verdi | Beskrivelse |
|---|---|
| 0 | Alle andre Brukes for varer som ikke passer inn i andre kategorier. Sjelden brukt i generell detaljhandel. |
| 1 | Salgssted (POS) Handelsvare Standard forbrukerenhet som selges på salgsstedet. Eksempel: En enkelt flaske sjampo. |
| 2 | Full 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'. |
| 3 | Reservert Reservert for fremtidig bruk. |
| 4 | Indre pakke handelsvaregruppering En gruppering mindre enn en full kasse, ofte for hyllevisning eller håndtering. Eksempel: En krympepakket 3-pakning inne i hovedkartongen. |
| 5 | Reservert Reservert for fremtidig bruk. |
| 6 | Enhetslast En stor logistikkenhet, typisk en pall som inneholder flere kolli. |
| 7 | Komponent inne i forbrukerenhet En spesifikk del inne i en forbrukerenhet. Eksempel: Batteridekselet inne i en leke. |
| Verdi | Bedriftsprefiks | Varehenvisning |
|---|---|---|
| 0 | 40 Biter / 12 Siffer | 4 Biter / 1 Siffer |
| 1 | 37 Biter / 11 Siffer | 7 Biter / 2 Siffer |
| 2 | 34 Biter / 10 Siffer | 10 Biter / 3 Siffer |
| 3 | 30 Biter / 9 Siffer | 14 Biter / 4 Siffer |
| 4 | 27 Biter / 8 Siffer | 17 Biter / 5 Siffer |
| 5 | 24 Biter / 7 Siffer | 20 Biter / 6 Siffer |
| 6 | 20 Biter / 6 Siffer | 24 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).