Převodník kódů RFID
Převodník RFID
Převod mezi RFID Hex (SGTIN-96) a GS1 čárovým kódem (GTIN) + sériovým číslem.
EPC URIs
Logika kódu a krok za krokem
// 1. Binary Conversion
// 2. Extract Fields (Bit Slice)
// 3. Determine Partition Rule (Partition 5)
// 4. Extract Company, Item & Serial
Kód pro vývojáře
Použijte tuto pomocnou logiku ve vašem projektu. Vyberte jazyk níže.
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}Vysvětlení
SGTIN-96 je 96bitový binární řetězec rozdělený do 6 částí:
001100000x30Standardní prefix (00110000) identifikující tento formát jako SGTIN-96.
0113Typ objektu (např. 1 = Maloobchod). Viz referenční příručka.
1015Partition 5 znamená: Kód společnosti zabírá 24 bitů, Kód produktu zabírá 20 bitů.
1000100001010111110000118935363Jedinečný kód společnosti přidělený organizací GS1.
00010111011001011101095837Váš konkrétní kód produktu.
000000000000000000000000000000000000011Jedinečný identifikátor pro každý konkrétní fyzický produkt.
Porozumění SGTIN a GTIN
Vizualizace vztahu mezi vaším fyzickým čárovým kódem a elektronickým kódem produktu (EPC).

Logika kódování (krok za krokem)
- Krok 1: Určete binární hodnotu záhlaví pro EPC schéma. Binární hodnota záhlaví pro SGTIN-96 je „00110000".
- Krok 2: Vyberte hodnotu Partition na základě počtu číslic v předponě společnosti z tabulky hodnot Partition.
- Krok 3: Převeďte hodnotu filtru, Partition, předponu společnosti, odkaz na položku a sériové číslo na binární hodnotu.
- Krok 4: Zřetězte v pořadí záhlaví, filtr, partition, předponu společnosti, odkaz na položku a binární hodnoty sériového čísla, abyste vytvořili binární EPC.
Referenční příručka SGTIN-96
| Hodnota | Popis |
|---|---|
| 0 | Všechny ostatní Používá se pro položky, které nepatří do jiných kategorií. Zřídka používané v běžném maloobchodě. |
| 1 | Položka na prodejně (POS Trade Item) Standardní spotřebitelská jednotka prodávaná na prodejním místě. Příklad: Jedna láhev šamponu. |
| 2 | Plný kartón pro přepravu (Full Case) Standardní přepravní jednotka obsahující více položek. Příklad: Karton 12 lahví šamponu. Kritické pro logistiku k rozlišení „jednoho kartónu" od „jedné položky". |
| 3 | Vyhrazeno (Reserved) Vyhrazeno pro budoucí použití. |
| 4 | Seskupení vnitřního balení (Inner Pack) Seskupení menší než plný kartón, často pro vystavení nebo manipulaci. Příklad: Svazek 3 ks zabalených v smršťovací fólii uvnitř hlavního kartónu. |
| 5 | Vyhrazeno (Reserved) Vyhrazeno pro budoucí použití. |
| 6 | Jednotková zátěž (Unit Load) Velká logistická jednotka, obvykle paleta obsahující více kartónů. |
| 7 | Součást uvnitř (Component) Konkrétní díl uvnitř spotřebitelské jednotky. Příklad: Víčko baterie uvnitř hračky. |
| Hodnota | Předpona společnosti | Odkaz na položku |
|---|---|---|
| 0 | 40 Bity / 12 Číslice | 4 Bity / 1 Číslice |
| 1 | 37 Bity / 11 Číslice | 7 Bity / 2 Číslice |
| 2 | 34 Bity / 10 Číslice | 10 Bity / 3 Číslice |
| 3 | 30 Bity / 9 Číslice | 14 Bity / 4 Číslice |
| 4 | 27 Bity / 8 Číslice | 17 Bity / 5 Číslice |
| 5 | 24 Bity / 7 Číslice | 20 Bity / 6 Číslice |
| 6 | 20 Bity / 6 Číslice | 24 Bity / 7 Číslice |
Často kladené dotazy k SGTIN-96
- Říká systému úroveň balení tagu. Pokud systém přečte tag „Kartón" (Filtr 2), ví, že obsahuje více položek. To zabraňuje dvojímu počítání (např. počítání kartónu jako jedné jednotky) a umožňuje ověření přepravy.
- Kartón (Filtr 2) je primární přepravní jednotka používaná pro přepravu. Vnitřní balení (Filtr 4) je členění uvnitř tohoto kartónu, obvykle pro snadnější manipulaci nebo vystavení (např. svazek 6 ks uvnitř kartónu 24 ks). Logistické systémy sledují kartóny; prodejní operace mohou efektivně zpracovávat vnitřní balení.
- Dekódování selže nebo vytvoří nesprávný čárový kód. Partition přesně určuje, kde končí předpona společnosti a začíná odkaz na položku. Pokud je tento „bod rozdělení" nesprávný, získáte jiný kód společnosti, než bylo zamýšleno.
- Standardní GTIN (čárový kód) identifikuje pouze typ produktu (např. „330ml nápoj"). SGTIN-96 přidává sériové číslo, které dává každé jednotce jedinečnou identitu. To umožňuje sledovatelnost na úrovni položky, takže můžete sledovat přesně, který konkrétní produkt byl prodán, ukraden nebo vypršel.
- Ano. Jak je znázorněno v převodníku výše, řetězec SGTIN-96 obsahuje úplný GTIN-14. Odebráním sériového čísla a informací záhlaví můžete dokonale rekonstruovat původní maloobchodní čárový kód.
- Záhlaví (0x30) je standardní 8bitová předpona definovaná organizací GS1. Jednoduše říká jakémukoli čtecímu zařízení RFID: „Tento tag je zakódován pomocí standardu SGTIN-96." Další záhlaví existují pro různé standardy (jako SSCC pro palety nebo GIAI pro aktiva).