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 = Търговски артикул). Вижте справочното ръководство по-долу.
1015Партиция 5 означава: Кодът на Компанията заема 24 бита, Кодът на Продукта заема 20 бита.
1000100001010111110000118935363Уникален код на компанията, зададен от GS1.
00010111011001011101095837Вашият специфичен код на продукта.
000000000000000000000000000000000000011Уникален идентификатор за всеки конкретен физически продукт.
Разбиране на SGTIN и GTIN
Визуализиране на връзката между вашия физически баркод и електронния код на продукта (EPC).

Логика на Кодиране (Стъпка по Стъпка)
- Стъпка 1: Определете двоичната стойност на хедъра за EPC схемата. Двоичната стойност на хедъра за SGTIN-96 е „00110000".
- Стъпка 2: Изберете стойността на Партицията въз основа на броя цифри в Префикса на Компанията от таблицата със стойности на партиции.
- Стъпка 3: Конвертирайте стойността на Филтъра, стойността на Партицията, Префикса на Компанията, Референтния номер на Артикула и Серийния номер в двоична стойност.
- Стъпка 4: Конкатенирайте в ред двоичните стойности на Хедъра, Филтъра, Партицията, Префикса на Компанията, Референтния номер на Артикула и Серийния номер, за да формирате двоичния EPC.
Справочно Ръководство за SGTIN-96
| Стойност | Описание |
|---|---|
| 0 | Всички останали Използва се за артикули, които не се вместват в други категории. Рядко се използва в обикновената търговия. |
| 1 | Търговски артикул на мястото на продажба Стандартната потребителска единица, продавана на мястото на продажба. Пример: Единична бутилка шампоан. |
| 2 | Пълна каса за транспорт Стандартна транспортна единица, съдържаща множество артикули. Пример: Кашон с 12 бутилки шампоан. Критично за логистиката да се разграничи 'една каса' от 'един артикул'. |
| 3 | Резервирано Резервирано за бъдеща употреба. |
| 4 | Групиране на Вътрешни Опаковки Групиране, по-малко от пълна каса, обикновено за рафтово display или боравене. Пример: Опаковка от 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
- Тя казва на системата нивото на опаковане на етикета. Ако система прочете етикет 'Каса' (Филтър 2), тя знае, че съдържа множество артикули. Това предотвратява двойно броене (напр. броене на каса като една единица) и позволява валидна проверка на експедицията.
- Каса (Филтър 2) е основната транспортна единица. Вътрешна Опаковка (Филтър 4) е подразделение вътре в тази каса, обикновено за по-лесно боравене или display (като опаковка от 6 броя вътре в каса от 24). Логистичните системи проследяват Каси; Операциите в магазина могат ефективно да боравят с Вътрешни Опаковки.
- Декодирането ще се провали или ще произведе грешен баркод. Партицията определя точно къде свършва Префиксът на Компанията и започва Референтният номер на Артикула. Ако тази 'точка на разделяне' е грешна, ще получите различен код на компанията от предвидения.
- Стандартният GTIN (Баркод) идентифицира само типа продукт ( напр. 'Газирана напитка 330мл'). SGTIN-96 добавя Сериен Номер, давайки на всяка кутия уникална идентичност. Това позволява проследяване на ниво артикул, позволявайки ви да проследявате точно кой конкретен артикул е продаден, откраднат или с изтекъл срок.
- Да. Както е показано в конвертора по-горе, низът SGTIN-96 съдържа пълния GTIN-14. Като премахнете Серийния номер и информацията за хедъра, можете перфектно да реконструирате оригиналния търговски баркод.
- Хедърът (0x30) е стандартен 8-битов префикс, дефиниран от GS1. Той просто казва на всеки RFID четец: „Този етикет е кодиран с SGTIN-96 стандарта." Съществуват други хедъри за различни стандарти (като SSCC за палети или GIAI за активи).