Конвертер RFID кодів
Конвертер RFID
Перетворення між RFID Hex (SGTIN-96) та штрих-кодом GS1 (GTIN) + серійний номер.
EPC URIs
Логіка коду та покрокова інструкція
// 1. Binary Conversion
// 2. Extract Fields (Bit Slice)
// 3. Determine Partition Rule (Partition 5)
// 4. Extract Company, Item & Serial
Код розробника
Використовуйте цю логіку у вашому проєкті. Виберіть мову нижче.
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}Пояснити
SGTIN-96. це 96-бітна двійкова строка, розділена на 6 частин:
001100000x30Стандартний префікс (00110000), що ідентифікує це як SGTIN-96.
0113Тип об'єкта (наприклад, 1 = Retail Retail). Див. Довідковий посібник нижче.
1015Розділ 5 означає: Код компанії займає 24 біт, код продукту займає 20 біт.
1000100001010111110000118935363Унікальний код компанії, призначений GS1.
00010111011001011101095837Ваш конкретний код продукту.
000000000000000000000000000000000000011Унікальний ідентифікатор для кожного конкретного фізичного продукту.
Розуміння SGTIN та GTIN
Візуалізація взаємозв'язку між вашим фізичним штрих-кодом та електронним кодом продукту (EPC).

Логіка кодування (покроково)
- Крок 1: Визначте двійкове значення заголовка для схеми EPC. Двійкове значення заголовка для SGTIN-96. «00110000».
- Крок 2: Виберіть значення розділу на основі кількості цифр у префіксі компанії з таблиці значень розділів.
- Крок 3: Перетворіть значення фільтра, значення розділу, префікс компанії, посилання на товар і серійний номер у двійкове значення.
- Крок 4: Об’єднайте в порядку заголовка, фільтра, розділу, префікса компанії, посилання на товар і серійного номера двійкові значення, щоб сформувати двійковий EPC.
Довідник SGTIN-96
| Значення | Опис |
|---|---|
| 0 | Всі інші Використовується для товарів, які не підходять до інших категорій. Рідко використовується в роздрібній торгівлі. |
| 1 | Товар для продажу (POS) Стандартна споживча одиниця, що продається в точці продажу. Наприклад: одна пляшка шампуню. |
| 2 | Повна коробка для транспортування Стандартна транспортна одиниця, що містить кілька товарів. Наприклад: коробка з 12 пляшками шампуню. Критично важливо для логістики, щоб відрізнити «одну коробку» від «одного товару». |
| 3 | Зарезервовано Зарезервовано для майбутнього використання. |
| 4 | Групування товарів у внутрішній упаковці Групування менше, ніж повна коробка, часто для демонстрації на полиці або обробки. Наприклад: термозбіжна упаковка з 3 пляшок всередині основної коробки. |
| 5 | Зарезервовано Зарезервовано для майбутнього використання. |
| 6 | Одиниця завантаження Велика логістична одиниця, як правило, палета, що містить кілька коробок. |
| 7 | Компонент всередині споживчої одиниці Конкретна деталь всередині споживчої одиниці. Наприклад: кришка батарейного відсіку всередині іграшки. |
| Значення | Префікс компанії | Посилання на товар |
|---|---|---|
| 0 | 40 Біти / 12 Цифри | 4 Біти / 1 Цифри |
| 1 | 37 Біти / 11 Цифри | 7 Біти / 2 Цифри |
| 2 | 34 Біти / 10 Цифри | 10 Біти / 3 Цифри |
| 3 | 30 Біти / 9 Цифри | 14 Біти / 4 Цифри |
| 4 | 27 Біти / 8 Цифри | 17 Біти / 5 Цифри |
| 5 | 24 Біти / 7 Цифри | 20 Біти / 6 Цифри |
| 6 | 20 Біти / 6 Цифри | 24 Біти / 7 Цифри |
SGTIN-96 Поширені запитання
- Він повідомляє системі про рівень пакування мітки. Якщо система зчитує мітку 'Case' (Фільтр 2), вона знає, що вона містить кілька одиниць. Це запобігає подвійному підрахунку (наприклад, підрахунок кейсу як однієї одиниці) та дозволяє здійснювати перевірку доставки.
- Case (Фільтр 2). основна транспортна одиниця, що використовується для перевезення. Inner Pack (Фільтр 4). це підрозділ всередині цього кейсу, зазвичай для полегшення обробки або демонстрації (наприклад, 6 упаковок всередині кейсу з 24 банками). Логістичні системи відстежують Cases; Операції в магазинах можуть ефективно обробляти Inner Packs.
- Декодування не вдасться або створить неправильний штрих-код. Partition точно визначає, де закінчується Company Prefix і починається Item Reference. Якщо ця 'точка поділу' неправильна, ви отримаєте інший Company Code, ніж передбачалося.
- Стандартний GTIN (Штрих-код) визначає лише тип продукту (наприклад, '12oz Soda'). SGTIN-96 додає Serial Number, надаючи кожній окремій банці унікальну ідентичність. Це забезпечує відстеження на рівні окремих товарів, дозволяючи відстежувати, який саме товар було продано, вкрадено або термін придатності якого закінчився.
- Так. Як показано у конвертері вище, рядок SGTIN-96 містить повний GTIN-14. Видаливши Serial Number та інформацію заголовка, ви можете ідеально відтворити оригінальний штрих-код роздрібної торгівлі.
- The Header (0x30). це стандартний 8-бітний префікс, визначений GS1. Він просто повідомляє будь-якому RFID-зчитувачу: "Ця мітка закодована за стандартом SGTIN-96." Існують інші заголовки для різних стандартів (наприклад, SSCC для піддонів або GIAI для активів).