Engineering tools · EPC · GS1

RFID Конвертор на код

Алатка за конвертирање помеѓу SGTIN-96 (RFID Hex) и Баркод (GTIN) + Сериски број. Компатибилен со стандардни RFID читачи како Zebra, Chainway, Impinj, Nextwaves. Базиран на GS1 EPC Tag Data Standard.

RFID конвертор

Конвертирајте помеѓу RFID Hex (SGTIN-96) и GS1 Barcode (GTIN) + сериски број.

Scheme:SGTIN-9696 bits / Header 0x30

Логика на кодот и чекор-по-чекор

// 1. Binary Conversion

src = bin(0x3076215F0C5D974000000001) // = "001100000111011000100001010111110000110001011101100101110100000000000000000000000000000000000001"

// 2. Extract Fields (Bit Slice)

header = src[0:8] "00110000" 0x30
filter = src[8:11] "011" 3
partition = src[11:14] "101" 5

// 3. Determine Partition Rule (Partition 5)

rule = PARTITIONS[5]
// Company Bits: 24, Item Bits: 20

// 4. Extract Company, Item & Serial

company = src[14:38] "100010000101011111000011" 8935363
itemRef = src[38:58] "00010111011001011101" 095837
serial = src[58:96] "00000000000000000000000000000000000001" 1

Код за програмери

Користете ја оваа логика за комунални услуги во вашиот проект. Изберете јазик подолу.

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 делови:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Заглавие (8 бита)Bits 0-8 (8)
001100000x30

Стандардна претставка (00110000) која го идентификува ова како SGTIN-96.

Филтер (3 бита)Bits 8-11 (3)
0113

Тип на објект (на пр. 1 = Retail Retail). Видете го упатството за референца подолу.

Партиција (3 бита)Bits 11-14 (3)
1015

Партицијата 5 значи: Кодот на компанијата зазема 24 битови, кодот на производот зазема 20 битови.

Претставка на компанијаBits 14-38 (24)
1000100001010111110000118935363

Уникатен код на компанијата доделен од GS1.

Референтна ставкаBits 38-58 (20)
00010111011001011101095837

Вашиот специфичен код на производот.

Сериски број (38 бита)Bits 58-96 (38)
000000000000000000000000000000000000011

Уникатен идентификатор за секој специфичен физички производ.

Визуализација на односот помеѓу вашиот физички баркод и електронскиот код на производот (EPC).

Дијаграм кој ја покажува врската помеѓу Баркод (GTIN) и SGTIN-96 URI
  1. Чекор 1: Определете ја бинарната вредност на заглавието за EPC шемата. Бинарната вредност на заглавието за SGTIN-96 е „00110000.“
  2. Чекор 2: Изберете ја вредноста на партицијата врз основа на бројот на цифри во префиксот на компанијата од табелата со вредности на партиции.
  3. Чекор 3: Конвертирајте ја вредноста на филтерот, вредноста на партицијата, префиксот на компанијата, референцата на артиклот и серискиот број во бинарна вредност.
  4. Чекор 4: Спојте ги по редослед заглавието, филтерот, партицијата, префиксот на компанијата, референцата на артиклот и бинарните вредности на серискиот број за да го формирате бинарниот EPC.

SGTIN-96 Референтен водич

ВредностОпис
0Сите други
Се користи за ставки кои не се вклопуваат во другите категории. Ретко се користи во општата малопродажба.
1Точка на продажба (POS) Трговска ставка
Стандардна потрошувачка единица продадена на точката на продажба. Пример: Едно шише шампон.
2Целосен случај за транспорт
Стандардна транспортна единица која содржи повеќе ставки. Пример: Картон од 12 шишиња шампон. Клучно за логистиката да се разликува 'еден случај' од 'една ставка'.
3Резервирано
Резервирано за идна употреба.
4Групирање на трговски ставки во внатрешно пакување
Групирање помало од целосен случај, често за изложување на полица или ракување. Пример: Спакувано во фолија 3-пакет во главниот картон.
5Резервирано
Резервирано за идна употреба.
6Единица за товар
Голема логистичка единица, обично палета која содржи повеќе кутии.
7Компонента во рамките на потрошувачката единица
Специфичен дел во рамките на потрошувачката единица. Пример: Капакот за батерија во играчката.
ВредностПрефикс на компанијатаРеферентна ставка
040 Бити / 12 Цифри4 Бити / 1 Цифри
137 Бити / 11 Цифри7 Бити / 2 Цифри
234 Бити / 10 Цифри10 Бити / 3 Цифри
330 Бити / 9 Цифри14 Бити / 4 Цифри
427 Бити / 8 Цифри17 Бити / 5 Цифри
524 Бити / 7 Цифри20 Бити / 6 Цифри
620 Бити / 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 за средства).