Engineering tools · EPC · GS1

RFID कोड कन्व्हर्टर

SGTIN-96 (RFID हेक्स) आणि बारकोड (GTIN) + सिरीयल नंबरमधील रूपांतरण साधन. Zebra, Chainway, Impinj, Nextwaves सारख्या प्रमाणित RFID रीडर्ससोबत सुसंगत. GS1 EPC टॅग डेटा स्टँडर्ड वर आधारित.

RFID कन्व्हर्टर

RFID हेक्स (SGTIN-96) आणि GS1 बारकोड (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-बिट बायनरी स्ट्रिंग आहे:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
शीर्षलेख (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: फिल्टर व्हॅल्यू, पार्टीशन व्हॅल्यू, कंपनी प्रीफिक्स, आयटम रेफरन्स आणि सिरीयल # बायनरी व्हॅल्यूमध्ये रूपांतरित करा.
  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 (बारकोड) फक्त उत्पादनाचा प्रकार ओळखतो (उदा., '12oz सोडा'). SGTIN-96 एक अनुक्रमांक जोडते, ज्यामुळे प्रत्येक कॅनला एक अद्वितीय ओळख मिळते. हे आयटम-लेव्हल ट्रेसबिलिटी सक्षम करते, ज्यामुळे नेमकी कोणती विशिष्ट वस्तू विकली गेली, चोरी झाली किंवा कालबाह्य झाली याचा मागोवा घेणे शक्य होते.
  • होय. वरील कन्व्हर्टरमध्ये दर्शविल्याप्रमाणे, SGTIN-96 स्ट्रिंगमध्ये संपूर्ण GTIN-14 आहे. अनुक्रमांक आणि हेडर माहिती काढून टाकून, तुम्ही मूळ किरकोळ बारकोडची उत्तम प्रकारे पुनर्रचना करू शकता.
  • हेडर (0x30) हा GS1 द्वारे परिभाषित केलेला एक मानक 8-बिट उपसर्ग आहे. तो फक्त कोणत्याही RFID रीडरला सांगतो: "हा टॅग SGTIN-96 मानकाचा वापर करून एन्कोड केला आहे." इतर हेडर विविध मानकांसाठी अस्तित्वात आहेत (उदाहरणार्थ, पॅलेट्ससाठी SSCC किंवा एसेट्ससाठी GIAI).