Engineering tools · EPC · GS1
ממיר קוד RFID
כלי המרה בין SGTIN-96 (Hex של RFID) לבין ברקוד (GTIN) + מספר סידורי. תואם לקוראי RFID סטנדרטיים כמו Zebra, Chainway, Impinj, Nextwaves. מבוסס על GS1 EPC Tag Data Standard.
ממיר RFID
המר בין RFID Hex (SGTIN-96) לברקוד GS1 (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 הוא מחרוזת בינארית של 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מזהה ייחודי עבור כל מוצר פיזי ספציפי.
הבנת 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 פחיות). מערכות לוגיסטיקה עוקבות אחר ארגזים; פעולות חנות עשויות לטפל ביעילות באריזות פנימיות.
- הפענוח ייכשל או יפיק ברקוד שגוי. ה-Partition קובע בדיוק היכן מסתיים קידומת החברה ומתחיל הפניית הפריט. אם 'נקודת פיצול' זו שגויה, תקבל קוד חברה שונה ממה שהתכוונת.
- GTIN סטנדרטי (ברקוד) מזהה רק את סוג המוצר (למשל, 'סודה 12oz'). SGTIN-96 מוסיף מספר סידורי, מה שנותן לכל פחית זהות ייחודית. זה מאפשר מעקב ברמת הפריט, ומאפשר לך לעקוב בדיוק אחר הפריט הספציפי שנמכר, נגנב או פג תוקפו.
- כן. כפי שמוצג בממיר לעיל, מחרוזת SGTIN-96 מכילה את ה-GTIN-14 המלא. על ידי הסרת המספר הסידורי ומידע הכותרת, אתה יכול לשחזר בצורה מושלמת את הברקוד הקמעונאי המקורי.
- ה-Header (0x30) הוא קידומת סטנדרטית של 8 סיביות המוגדרת על ידי GS1. זה פשוט אומר לכל קורא RFID: "תג זה מקודד באמצעות תקן SGTIN-96." קיימות כותרות אחרות עבור תקנים שונים (כמו SSCC עבור משטחים או GIAI עבור נכסים).