Engineering tools · EPC · GS1

RFID ኮድ ለውጪ

SGTIN-96 (RFID Hex) እና ባርኮድ (GTIN) + ተከታታይ ቁጥር መካከል ለውጪ መሣሪያ። ከZebraChainwayImpinjNextwaves ያሉ መደበኛ RFID አንባቢዎች ጋር ተስማሚ። በGS1 EPC Tag Data Standard ላይ የተመሰረተ።

RFID ለውጪ

RFID Hex (SGTIN-96) እና GS1 Barcode (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-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

ለእያንዳንዱ የግል ምርት ልዩ መለያ።

የእርስዎን አካላዊ ማርክ እና የኤሌክትሮኒክ ምርት ኮድ (EPC) መካከል ያለውን ግንኙነት ማስተዋወቅ።

ማርክ (GTIN) እና SGTIN-96 URI መካከል ያለውን ግንኙነት የሚያሳይ ራስጌ
  1. ደረጃ 1: ለEPC ስኬማ የሁለትዮሽ ሄደር ዋጋን ይወስኑ። ለSGTIN-96 የሁለትዮሽ ሄደር ዋጋ "00110000" ነው።
  2. ደረጃ 2: የኩባንያ ቅድሚያ ውስጥ ያሉ አሃዛዊ ቁጥሮች ቁጥር ላይ በመመስረት የፓርቲሽን ዋጋን ይምረጡ።
  3. ደረጃ 3: ፊልተር፣ ፓርቲሽን፣ የኩባንያ ቅድሚያ፣ የምርት � REFERENCE፣ እና ሴሪያል # ወደ ሁለትዮሽ ዋጋ ቀይሩ።
  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 ዙሪያ የተለመዱ ጥያቄዎች

  • ለሲስተም የታግ የማሸጊያ ደረጃን ይነግረዋል። ሲስተም 'ሳጥን' ታግ (ፊልተር 2) ቢያነብ፣ ብዙ እቃዎችን እንዳለው ያውቃል። ይህ ሁለት ጊዜ መቁጠርን (ለምሳሌ አንድ ሳጥን እንደ አንድ ክፍል በማቁጠር) ይከላከላል እና ለማጓጓዝ ማረጋገጫ ያስችላል።
  • ሳጥን (ፊልተር 2) ለማጓጓዝ የሚያገለግል የማጓጓዝ ዋነኛ ክፍል ነው። የውስጥ ፓኬጅ (ፊልተር 4) በሳጥኑ ውስጥ ያለ ንዑስ ክፍል ነው፣ የተለመደ ለቀላል ማስተናገድ ወይም ለማስተዋወቅ (ለምሳሌ 24-ካን ሳጥን ውስጥ 6-ፓኬጅ)። የሎጂስቲክስ ሲስተሞች ሳጥኖችን ይከታተላሉ፤ የሱት ክዋኔዎች የውስጥ ፓኬጅዎችን በብቃት ሊያስተናግዱ ይችላሉ።
  • ማስተርት ይሳካል ወይም የተሳሳተ ማርክ ይፈጥራል። ፓርቲሽን የኩባንያ ቅድሚያ የሚያበቃበት እና የምርት ማጣቀሻ የሚጀምርበትን ነጥብ ይወስናል። ይህ 'የማ�分割 ነጥብ' ቢሳሳት፣ የተለየ የኩባንያ ኮድ እንዳለው ትርጉም ይሰጣል።
  • መደበኛ GTIN (ማርክ) የምርት አይነትን ብቻ ይለያል (ለምሳሌ '330ሚሊ ሶዳ')። SGTIN-96 ሴሪያል ቁጥር ይጨምራል፣ ለእያንዳንዱ ጠርሙስ ልዩ ማንነት ይሰጣል። ይህ የአካል ደረጃ የማንነት ተከታታይን ያስችላል፣ ምን የተለየ እቃ እንደተሸጠ፣ እንደተሰረቀ ወይም እንደተባከነ ለመከታተል ያስችላል።
  • አዎ። ከላይ ባለው ለውጪ ላይ ተመልክተህ፣ SGTIN-96 ሕብረቁምፊ ሙሉ GTIN-14ን ይዟል። ሴሪያል ቁጥር እና ሄደር መረጃን በማስወጣት፣ የተፈጥሮ ሽያጭ ማርክን በፍፁም መልሰህ ማቋቋም ትችላለህ።
  • ሄደር (0x30) በGS1 የተገለጸ 8-ቢት ቅድሚያ ነው። ለማንኛውም RFID አነባበር ቀላል ይላል: "ይህ ታግ በSGTIN-96 ደረጃ ነው የተኮደው።" ሌሎች ሄደሮች ለሌሎች ደረጃዎች (ለምሳሌ ፓሌት ወይም ለንብረት GIAI) አሉ።