Konwerter kodów RFID
Konwerter RFID
Konwertuj między RFID Hex (SGTIN-96) a kodem kreskowym GS1 (GTIN) + numerem seryjnym.
EPC URIs
Logika kodu i krok po kroku
// 1. Binary Conversion
// 2. Extract Fields (Bit Slice)
// 3. Determine Partition Rule (Partition 5)
// 4. Extract Company, Item & Serial
Kod programisty
Użyj tej logiki narzędziowej w swoim projekcie. Wybierz język poniżej.
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}Wyjaśnij
SGTIN-96 to 96-bitowy ciąg binarny podzielony na 6 części:
001100000x30Standardowy prefiks (00110000) identyfikujący jako SGTIN-96.
0113Typ obiektu (np. 1 = Retail Retail). Zobacz Przewodnik referencyjny poniżej.
1015Partycja 5 oznacza: Kod firmy zajmuje 24 bitów, kod produktu zajmuje 20 bitów.
1000100001010111110000118935363Unikalny kod firmy przypisany przez GS1.
00010111011001011101095837Twój specyficzny kod produktu.
000000000000000000000000000000000000011Unikalny identyfikator dla każdego konkretnego produktu fizycznego.
Zrozumienie SGTIN i GTIN
Wizualizacja relacji między fizycznym kodem kreskowym a elektronicznym kodem produktu (EPC).

Logika kodowania (krok po kroku)
- Krok 1: Określ binarną wartość nagłówka dla schematu EPC. Binarna wartość nagłówka dla SGTIN-96 to „00110000”.
- Krok 2: Wybierz wartość partycji na podstawie liczby cyfr w prefiksie firmy z tabeli wartości partycji.
- Krok 3: Przekonwertuj wartość filtra, wartość partycji, prefiks firmy, odniesienie do przedmiotu i numer seryjny na wartość binarną.
- Krok 4: Połącz w kolejności nagłówek, filtr, partycję, prefiks firmy, odniesienie do przedmiotu i binarne wartości numeru seryjnego, aby utworzyć binarny EPC.
Przewodnik referencyjny SGTIN-96
| Wartość | Opis |
|---|---|
| 0 | Wszystkie inne Używane dla przedmiotów, które nie pasują do innych kategorii. Rzadko używane w handlu detalicznym. |
| 1 | Punkt sprzedaży (POS) - pozycja handlowa Standardowa jednostka konsumencka sprzedawana w punkcie sprzedaży. Przykład: Pojedyncza butelka szamponu. |
| 2 | Pełna skrzynia do transportu Standardowa jednostka wysyłkowa zawierająca wiele przedmiotów. Przykład: Karton 12 butelek szamponu. Krytyczne dla logistyki, aby odróżnić 'jedną skrzynię' od 'jednego przedmiotu'. |
| 3 | Zarezerwowane Zarezerwowane do użytku w przyszłości. |
| 4 | Grupowanie pozycji handlowych w opakowaniu wewnętrznym Grupowanie mniejsze niż pełna skrzynia, często do ekspozycji na półce lub obsługi. Przykład: Zgrzewany 3-pak wewnątrz głównego kartonu. |
| 5 | Zarezerwowane Zarezerwowane do użytku w przyszłości. |
| 6 | Jednostka ładunkowa Duża jednostka logistyczna, zazwyczaj paleta zawierająca wiele kartonów. |
| 7 | Komponent wewnątrz jednostki konsumenckiej Konkretna część wewnątrz jednostki konsumenckiej. Przykład: Pokrywa baterii wewnątrz zabawki. |
| Wartość | Prefiks firmy | Odnośnik do przedmiotu |
|---|---|---|
| 0 | 40 Bity / 12 Cyfry | 4 Bity / 1 Cyfry |
| 1 | 37 Bity / 11 Cyfry | 7 Bity / 2 Cyfry |
| 2 | 34 Bity / 10 Cyfry | 10 Bity / 3 Cyfry |
| 3 | 30 Bity / 9 Cyfry | 14 Bity / 4 Cyfry |
| 4 | 27 Bity / 8 Cyfry | 17 Bity / 5 Cyfry |
| 5 | 24 Bity / 7 Cyfry | 20 Bity / 6 Cyfry |
| 6 | 20 Bity / 6 Cyfry | 24 Bity / 7 Cyfry |
SGTIN-96 Najczęściej Zadawane Pytania
- Informuje system o poziomie opakowania tagu. Jeśli system odczyta tag 'Case' (Filtr 2), wie, że zawiera on wiele elementów. Zapobiega to podwójnemu liczeniu (np. liczeniu skrzyni jako jednej jednostki) i umożliwia prawidłową weryfikację wysyłki.
- Case (Filtr 2) to podstawowa jednostka wysyłkowa używana do transportu. Inner Pack (Filtr 4) to podział wewnątrz tej skrzyni, zwykle dla ułatwienia obsługi lub ekspozycji (jak 6-pak wewnątrz skrzyni 24-puszkowej). Systemy logistyczne śledzą Cases; operacje w sklepie mogą sprawnie obsługiwać Inner Packs.
- Dekodowanie nie powiedzie się lub wygeneruje nieprawidłowy kod kreskowy. Partycja dokładnie określa, gdzie kończy się Prefiks Firmy, a zaczyna Odniesienie do Elementu. Jeśli ten 'punkt podziału' jest nieprawidłowy, otrzymasz inny Kod Firmy niż zamierzony.
- Standardowy GTIN (Kod kreskowy) identyfikuje tylko typ produktu (np. '12oz Soda'). SGTIN-96 dodaje Numer Seryjny, nadając każdej puszce unikalną tożsamość. Umożliwia to śledzenie na poziomie elementu, pozwalając dokładnie śledzić, który konkretny element został sprzedany, skradziony lub przeterminowany.
- Tak. Jak pokazano w konwerterze powyżej, ciąg SGTIN-96 zawiera kompletny GTIN-14. Usuwając Numer Seryjny i informacje nagłówka, można idealnie zrekonstruować oryginalny kod kreskowy detaliczny.
- Nagłówek (0x30) to standardowy 8-bitowy prefiks zdefiniowany przez GS1. Po prostu informuje każdy czytnik RFID: "Ten tag jest zakodowany przy użyciu standardu SGTIN-96." Istnieją inne nagłówki dla różnych standardów (jak SSCC dla palet lub GIAI dla aktywów).