Engineering tools · EPC · GS1

RFID код түрлендіргіші

SGTIN-96 (RFID Hex) және Штрих-код (GTIN) + Сериялық нөмір арасындағы түрлендіру құралы. Zebra, Chainway, Impinj, Nextwaves сияқты стандартты RFID оқығыштарымен үйлесімді. 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. 6 бөлікке бөлінген 96 биттік екілік жол:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Тақырып (8 бит)Bits 0-8 (8)
001100000x30

Бұл SGTIN-96 ретінде анықтайтын стандартты префикс (00110000).

Сүзгі (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' тегін (Filter 2) оқыса, оның бірнеше элементтен тұратынын біледі. Бұл екі рет санаудың алдын алады (мысалы, корпусты бір ғана бірлік ретінде санау) және жарамды жеткізуді тексеруге мүмкіндік береді.
  • Case (Filter 2) - тасымалдау үшін қолданылатын негізгі жеткізу бірлігі. Inner Pack (Filter 4) - бұл корпус ішіндегі бөлімше, әдетте оңай басқару немесе көрсету үшін (мысалы, 24 банкалық корпустағы 6-пакет сияқты). Логистикалық жүйелер Case-терді бақылайды; Дүкен операциялары Inner Pack-терді тиімді түрде басқара алады.
  • Декодтау сәтсіздікке ұшырайды немесе дұрыс емес штрих-код шығарады. Partition Company Prefix қай жерде аяқталатынын және Item Reference қай жерден басталатынын дәл анықтайды. Егер бұл 'бөлу нүктесі' дұрыс болмаса, сіз жоспарланғаннан басқа Company Code аласыз.
  • Стандартты GTIN (Штрих-код) тек өнім түрін (мысалы, '12oz Soda') анықтайды. SGTIN-96 Сериялық нөмірді қосады, бұл әрбір банкаға бірегей сәйкестік береді. Бұл элементтік деңгейдегі қадағалауға мүмкіндік береді, бұл сізге нақты қай элементтің сатылғанын, ұрланғанын немесе мерзімі өткенін дәл бақылауға мүмкіндік береді.
  • Иә. Жоғарыдағы түрлендіргіште көрсетілгендей, SGTIN-96 жолында толық GTIN-14 бар. Сериялық нөмірді және тақырып ақпаратын алып тастау арқылы сіз түпнұсқалық бөлшек штрих-кодын мінсіз түрде қалпына келтіре аласыз.
  • Header (0x30) - GS1 анықтаған стандартты 8-биттік префикс. Ол кез келген RFID оқу құралына: "Бұл тег SGTIN-96 стандартымен кодталған" дейді. Басқа стандарттар үшін басқа тақырыптар бар (мысалы, паллеттер үшін SSCC немесе активтер үшін GIAI).