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 Баркод (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 = Търговски артикул). Вижте справочното ръководство по-долу.

Партиция (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Търговски артикул на мястото на продажба
Стандартната потребителска единица, продавана на мястото на продажба. Пример: Единична бутилка шампоан.
2Пълна каса за транспорт
Стандартна транспортна единица, съдържаща множество артикули. Пример: Кашон с 12 бутилки шампоан. Критично за логистиката да се разграничи 'една каса' от 'един артикул'.
3Резервирано
Резервирано за бъдеща употреба.
4Групиране на Вътрешни Опаковки
Групиране, по-малко от пълна каса, обикновено за рафтово display или боравене. Пример: Опаковка от 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

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