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 Barcode (GTIN) + ተከታታይ ቁጥር መካከል ይቀይሩ።
Scheme:SGTIN-9696 bits / Header 0x30
EPC URIs
የኮድ ሎጂክ እና በደረጃ
// 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-bit ሁለገብ ሕብረቁምፊ ነው፡
HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Header (8 ቁርጥራጭ)Bits 0-8 (8)
001100000x30ይህን SGTIN-96 እንደሆነ የሚያሳይ መደበኛ ፕሪፊክስ (00110000)።
ፈልገር (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ለእያንዳንዱ የግል ምርት ልዩ መለያ።
SGTIN እና GTINን መረዳት
የእርስዎን አካላዊ ማርክ እና የኤሌክትሮኒክ ምርት ኮድ (EPC) መካከል ያለውን ግንኙነት ማስተዋወቅ።

የኮዲንግ ሎጂክ (በደረጃ)
- ደረጃ 1: ለEPC ስኬማ የሁለትዮሽ ሄደር ዋጋን ይወስኑ። ለSGTIN-96 የሁለትዮሽ ሄደር ዋጋ "00110000" ነው።
- ደረጃ 2: የኩባንያ ቅድሚያ ውስጥ ያሉ አሃዛዊ ቁጥሮች ቁጥር ላይ በመመስረት የፓርቲሽን ዋጋን ይምረጡ።
- ደረጃ 3: ፊልተር፣ ፓርቲሽን፣ የኩባንያ ቅድሚያ፣ የምርት � REFERENCE፣ እና ሴሪያል # ወደ ሁለትዮሽ ዋጋ ቀይሩ።
- ደረጃ 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 (ማርክ) የምርት አይነትን ብቻ ይለያል (ለምሳሌ '330ሚሊ ሶዳ')። SGTIN-96 ሴሪያል ቁጥር ይጨምራል፣ ለእያንዳንዱ ጠርሙስ ልዩ ማንነት ይሰጣል። ይህ የአካል ደረጃ የማንነት ተከታታይን ያስችላል፣ ምን የተለየ እቃ እንደተሸጠ፣ እንደተሰረቀ ወይም እንደተባከነ ለመከታተል ያስችላል።
- አዎ። ከላይ ባለው ለውጪ ላይ ተመልክተህ፣ SGTIN-96 ሕብረቁምፊ ሙሉ GTIN-14ን ይዟል። ሴሪያል ቁጥር እና ሄደር መረጃን በማስወጣት፣ የተፈጥሮ ሽያጭ ማርክን በፍፁም መልሰህ ማቋቋም ትችላለህ።
- ሄደር (0x30) በGS1 የተገለጸ 8-ቢት ቅድሚያ ነው። ለማንኛውም RFID አነባበር ቀላል ይላል: "ይህ ታግ በSGTIN-96 ደረጃ ነው የተኮደው።" ሌሎች ሄደሮች ለሌሎች ደረጃዎች (ለምሳሌ ፓሌት ወይም ለንብረት GIAI) አሉ።