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. 6 бөлікке бөлінген 96 биттік екілік жол:
001100000x30Бұл SGTIN-96 ретінде анықтайтын стандартты префикс (00110000).
0113Объект түрі (мысалы, 1 = Retail Retail). Төмендегі анықтамалықты қараңыз.
10155 бөлімі мынаны білдіреді: Компания коды 24 бит алады, Өнім коды 20 бит алады.
1000100001010111110000118935363GS1 тағайындаған бірегей компания коды.
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' тегін (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).