RFID kodo konverteris
RFID konverteris
Konvertuokite tarp RFID Hex (SGTIN-96) ir GS1 brūkšninio kodo (GTIN) + serijos numerio.
EPC URIs
Kodo logika ir žingsnis po žingsnio
// 1. Binary Conversion
// 2. Extract Fields (Bit Slice)
// 3. Determine Partition Rule (Partition 5)
// 4. Extract Company, Item & Serial
Kūrėjo kodas
Naudokite šią programinę įrangą savo projekte. Pasirinkite kalbą žemiau.
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}Paaiškinti
SGTIN-96 yra 96 bitų dvejetainė eilutė, padalinta į 6 dalis:
001100000x30Standartinis prefiksas (00110000), identifikuojantis tai kaip SGTIN-96.
0113Objekto tipas (pvz., 1 = Mažmeninė prekyba). Žr. nuorodų vadovą žemiau.
1015Skirsnis 5 reiškia: Įmonės kodas užima 24 bitus, Produkto kodas užima 20 bitus.
1000100001010111110000118935363Unikalus įmonės kodas, priskirtas GS1.
00010111011001011101095837Jūsų specifinis produkto kodas.
000000000000000000000000000000000000011Unikalus kiekvieno konkretaus fizinio produkto identifikatorius.
SGTIN ir GTIN supratimas
Vizualizuojamas ryšys tarp jūsų fizinio brūkšninio kodo ir elektroninio produkto kodo (EPC).

Kodavimo logika (žingsnis po žingsnio)
- 1 žingsnis: Nustatyti binaro antraštės reikšmę EPC schemai. Binaro antraštės reikšmė SGTIN-96 yra „00110000“.
- 2 žingsnis: Pasirinkti Skirsnio reikšmę pagal įmonės prefikso skaitmenų skaičių iš Skirsnio reikšmių lentelės.
- 3 žingsnis: Konvertuoti Filtro reikšmę, Skirsnio reikšmę, Įmonės prefiksą, Prekės nuorodą ir Serijos numerį į binaro reikšmę.
- 4 žingsnis: Sujungti eilės tvarka Antraštės, Filtro, Skirsnio, Įmonės prefikso, Prekės nuorodos ir Serijos numerio binaro reikšmes, kad susidarytų Binarinis EPC.
SGTIN-96 nuorodų vadovas
| Reikšmė | Aprašymas |
|---|---|
| 0 | Visi kiti Naudojama prekėms, kurios netinka kitoms kategorijoms. Retai naudojama mažmeninėje prekyboje. |
| 1 | Pardavimo vieta (POS) Prekybos prekė Standartinis vartotojo vienetas, parduodamas pardavimo vietoje. Pavyzdys: vienas šampūno buteliukas. |
| 2 | Pilnas transportavimo dėklas Standartinis siuntimo vienetas, kuriame yra keli daiktai. Pavyzdys: 12 šampūno buteliukų dėžutė. Kritinis logistikai atskirti „vieną dėklą“ nuo „vieno daikto“. |
| 3 | Rezervuota Rezervuota ateičiai. |
| 4 | Vidinis pakuotės prekybos prekės grupavimas Grupavimas, mažesnis nei pilnas dėklas, dažnai skirtas lentynoms ar tvarkymui. Pavyzdys: susitraukianti 3 vienetų pakuotė pagrindinėje dėžutėje. |
| 5 | Rezervuota Rezervuota ateičiai. |
| 6 | Vieneto apkrova Didelis logistikos vienetas, paprastai padėklas, kuriame yra keli dėklai. |
| 7 | Komponentas vartotojo įrenginio viduje Konkretus komponentas vartotojo įrenginio viduje. Pavyzdys: Baterijos dangtelis žaislo viduje. |
| Reikšmė | Įmonės prefiksas | Prekės nuoroda |
|---|---|---|
| 0 | 40 Bitai / 12 Skaitmenys | 4 Bitai / 1 Skaitmenys |
| 1 | 37 Bitai / 11 Skaitmenys | 7 Bitai / 2 Skaitmenys |
| 2 | 34 Bitai / 10 Skaitmenys | 10 Bitai / 3 Skaitmenys |
| 3 | 30 Bitai / 9 Skaitmenys | 14 Bitai / 4 Skaitmenys |
| 4 | 27 Bitai / 8 Skaitmenys | 17 Bitai / 5 Skaitmenys |
| 5 | 24 Bitai / 7 Skaitmenys | 20 Bitai / 6 Skaitmenys |
| 6 | 20 Bitai / 6 Skaitmenys | 24 Bitai / 7 Skaitmenys |
SGTIN-96 Dažnai užduodami klausimai
- Ji nurodo sistemai žymos pakavimo lygį. Jei sistema nuskaito 'Dėklo' žymą (Filtras 2), ji žino, kad joje yra keli vienetai. Tai apsaugo nuo dvigubo skaičiavimo (pvz., dėklo skaičiavimo kaip vieno vieneto) ir leidžia patikrinti siuntą.
- Dėklas (Filtras 2) yra pagrindinis transportavimui naudojamas siuntimo vienetas. Vidinis paketas (Filtras 4) yra padalinys dėklo viduje, paprastai skirtas lengvesniam tvarkymui ar eksponavimui (pvz., 6 pakuotės 24 skardinių dėkle). Logistikos sistemos seka Dėklus; Parduotuvių operacijos gali efektyviai tvarkyti Vidinius paketus.
- Dekodavimas nepavyks arba bus gautas neteisingas Brūkšninis kodas. Skirsnis tiksliai nustato, kur baigiasi Įmonės prefiksas ir prasideda Prekės nuoroda. Jei šis „padalijimo taškas“ yra neteisingas, gausite kitą Įmonės kodą nei numatyta.
- Standartinis GTIN (Brūkšninis kodas) identifikuoja tik produkto tipą (pvz., '12oz Soda'). SGTIN-96 prideda Serijos numerį, suteikdama kiekvienai skardinei unikalų tapatumą. Tai leidžia sekti kiekvieną prekę, leidžiant sekti, kuri konkreti prekė buvo parduota, pavogta ar pasibaigė jos galiojimo laikas.
- Taip. Kaip parodyta aukščiau esančiame konverteryje, SGTIN-96 eilutė apima visą GTIN-14. Pašalinę Serijos numerį ir antraštės informaciją, galite puikiai atkurti originalų mažmeninės prekybos brūkšninį kodą.
- Antraštė (0x30) yra standartinis 8 bitų prefiksas, apibrėžtas GS1. Ji tiesiog sako bet kuriam RFID skaitytuvui: „Ši žyma užkoduota naudojant SGTIN-96 standartą.“ Yra ir kitų antraščių skirtingiems standartams (pvz., SSCC padėklams arba GIAI turtui).