RFID Конвертор на код
RFID конвертор
Конвертирајте помеѓу RFID Hex (SGTIN-96) и GS1 Barcode (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 додава Сериски број, давајќи му на секоја лименка уникатен идентитет. Ова овозможува следливост на ниво на артикл, што ви овозможува да следите точно кој конкретен артикл е продаден, украден или истечен.
- Да. Како што е прикажано во конверторот погоре, низата SGTIN-96 го содржи комплетниот GTIN-14. Со отстранување на серискиот број и информациите за заглавието, можете совршено да го реконструирате оригиналниот малопродажен баркод.
- Header (0x30) е стандардна 8-битна претставка дефинирана од GS1. Едноставно му кажува на секој RFID читач: "Овој таг е кодиран со користење на стандардот SGTIN-96." Постојат други заглавија за различни стандарди (како SSCC за палети или GIAI за средства).