RFID ಕೋಡ್ ಪರಿವರ್ತಕ
RFID ಪರಿವರ್ತಕ
RFID ಹೆಕ್ಸ್ (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-ಬಿಟ್ ಬೈನರಿ ಸ್ಟ್ರಿಂಗ್ ಆಗಿದೆ:
001100000x30SGTIN-96 ಎಂದು ಗುರುತಿಸುವ ಪ್ರಮಾಣಿತ ಪೂರ್ವಪ್ರತ್ಯಯ (00110000).
0113ವಸ್ತು ಪ್ರಕಾರ (ಉದಾ. 1 = ಚಿಲ್ಲರೆ). ಕೆಳಗಿನ ಉಲ್ಲೇಖ ಮಾರ್ಗದರ್ಶಿಯನ್ನು ನೋಡಿ.
1015ವಿಭಾಗ 5 ಎಂದರೆ: ಕಂಪನಿ ಕೋಡ್ 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 ಆಗಾಗ್ಗೆ ಕೇಳಲಾಗುವ ಪ್ರಶ್ನೆಗಳು
- ಇದು ಟ್ಯಾಗ್ನ ಪ್ಯಾಕೇಜಿಂಗ್ ಮಟ್ಟ ವನ್ನು ಸಿಸ್ಟಮ್ಗೆ ತಿಳಿಸುತ್ತದೆ. ಸಿಸ್ಟಮ್ 'ಕೇಸ್' ಟ್ಯಾಗ್ (ಫಿಲ್ಟರ್ 2) ಅನ್ನು ಓದಿದರೆ, ಅದು ಅನೇಕ ಐಟಂಗಳನ್ನು ಒಳಗೊಂಡಿದೆ ಎಂದು ತಿಳಿಯುತ್ತದೆ. ಇದು ಡಬಲ್-ಕೌಂಟಿಂಗ್ ಅನ್ನು ತಡೆಯುತ್ತದೆ (ಉದಾಹರಣೆಗೆ, ಒಂದು ಪ್ರಕರಣವನ್ನು ಒಂದೇ ಘಟಕವಾಗಿ ಎಣಿಸುವುದು) ಮತ್ತು ಮಾನ್ಯವಾದ ಶಿಪ್ಪಿಂಗ್ ಪರಿಶೀಲನೆಗೆ ಅನುಮತಿಸುತ್ತದೆ.
- ಕೇಸ್ (ಫಿಲ್ಟರ್ 2) ಸಾಗಣೆಗಾಗಿ ಬಳಸಲಾಗುವ ಪ್ರಾಥಮಿಕ ಶಿಪ್ಪಿಂಗ್ ಘಟಕವಾಗಿದೆ. ಇನ್ನರ್ ಪ್ಯಾಕ್ (ಫಿಲ್ಟರ್ 4) ಆ ಪ್ರಕರಣದೊಳಗಿನ ಉಪವಿಭಾಗವಾಗಿದೆ, ಸಾಮಾನ್ಯವಾಗಿ ಸುಲಭವಾದ ನಿರ್ವಹಣೆ ಅಥವಾ ಪ್ರದರ್ಶನಕ್ಕಾಗಿ (ಉದಾಹರಣೆಗೆ 24-ಕ್ಯಾನ್ ಪ್ರಕರಣದ ಒಳಗೆ 6-ಪ್ಯಾಕ್). ಲಾಜಿಸ್ಟಿಕ್ಸ್ ಸಿಸ್ಟಮ್ಗಳು ಕೇಸ್ಗಳನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡುತ್ತವೆ; ಸ್ಟೋರ್ ಕಾರ್ಯಾಚರಣೆಗಳು ಸಮರ್ಥವಾಗಿ ಇನ್ನರ್ ಪ್ಯಾಕ್ಗಳನ್ನು ನಿರ್ವಹಿಸಬಹುದು.
- ಡಿಕೋಡಿಂಗ್ ವಿಫಲಗೊಳ್ಳುತ್ತದೆ ಅಥವಾ ತಪ್ಪಾದ ಬಾರ್ಕೋಡ್ ಅನ್ನು ಉತ್ಪಾದಿಸುತ್ತದೆ. ವಿಭಜನೆ ಕಂಪನಿ ಪೂರ್ವಪ್ರತ್ಯಯ ಎಲ್ಲಿ ಕೊನೆಗೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಐಟಂ ಉಲ್ಲೇಖ ಎಲ್ಲಿ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ನಿಖರವಾಗಿ ನಿರ್ಧರಿಸುತ್ತದೆ. ಈ 'ಸ್ಪ್ಲಿಟ್ ಪಾಯಿಂಟ್' ತಪ್ಪಾಗಿದ್ದರೆ, ನೀವು ಉದ್ದೇಶಿತಕ್ಕಿಂತ ವಿಭಿನ್ನ ಕಂಪನಿ ಕೋಡ್ ಅನ್ನು ಪಡೆಯುತ್ತೀರಿ.
- ಸ್ಟ್ಯಾಂಡರ್ಡ್ GTIN (ಬಾರ್ಕೋಡ್) ಕೇವಲ ಉತ್ಪನ್ನದ ಪ್ರಕಾರವನ್ನು ಗುರುತಿಸುತ್ತದೆ (ಉದಾಹರಣೆಗೆ, '12oz ಸೋಡಾ'). SGTIN-96 ಒಂದು ಸರಣಿ ಸಂಖ್ಯೆಯನ್ನು ಸೇರಿಸುತ್ತದೆ, ಇದು ಪ್ರತಿಯೊಂದು ಕ್ಯಾನ್ಗೆ ಅನನ್ಯ ಗುರುತನ್ನು ನೀಡುತ್ತದೆ. ಇದು ಐಟಂ-ಮಟ್ಟದ ಟ್ರೇಸಿಬಿಲಿಟಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ, ಇದು ಯಾವ ನಿರ್ದಿಷ್ಟ ಐಟಂ ಅನ್ನು ಮಾರಾಟ ಮಾಡಲಾಗಿದೆ, ಕದ್ದಿದೆ ಅಥವಾ ಅವಧಿ ಮೀರಿದೆ ಎಂಬುದನ್ನು ನಿಖರವಾಗಿ ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ.
- ಹೌದು. ಮೇಲಿನ ಪರಿವರ್ತಕದಲ್ಲಿ ತೋರಿಸಿರುವಂತೆ, SGTIN-96 ಸ್ಟ್ರಿಂಗ್ ಸಂಪೂರ್ಣ GTIN-14 ಅನ್ನು ಒಳಗೊಂಡಿದೆ. ಸರಣಿ ಸಂಖ್ಯೆ ಮತ್ತು ಹೆಡರ್ ಮಾಹಿತಿಯನ್ನು ತೆಗೆದುಹಾಕುವ ಮೂಲಕ, ನೀವು ಮೂಲ ಚಿಲ್ಲರೆ ಬಾರ್ಕೋಡ್ ಅನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಪುನರ್ನಿರ್ಮಿಸಬಹುದು.
- ಹೆಡರ್ (0x30) GS1 ನಿಂದ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಪ್ರಮಾಣಿತ 8-ಬಿಟ್ ಪೂರ್ವಪ್ರತ್ಯಯವಾಗಿದೆ. ಇದು ಸರಳವಾಗಿ ಯಾವುದೇ RFID ರೀಡರ್ಗೆ ಹೇಳುತ್ತದೆ: "ಈ ಟ್ಯಾಗ್ ಅನ್ನು SGTIN-96 ಮಾನದಂಡವನ್ನು ಬಳಸಿ ಎನ್ಕೋಡ್ ಮಾಡಲಾಗಿದೆ." ವಿಭಿನ್ನ ಮಾನದಂಡಗಳಿಗಾಗಿ ಇತರ ಹೆಡರ್ಗಳು ಅಸ್ತಿತ್ವದಲ್ಲಿವೆ (ಉದಾಹರಣೆಗೆ ಪ್ಯಾಲೆಟ್ಗಳಿಗಾಗಿ SSCC ಅಥವಾ ಸ್ವತ್ತುಗಳಿಗಾಗಿ GIAI).