Engineering tools · EPC · GS1

RFID კოდის გადამყვანი

კონვერტაციის ინსტრუმენტი SGTIN-96 (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

კოდის ლოგიკა და ეტაპობრივად

// 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

უნიკალური იდენტიფიკატორი თითოეული კონკრეტული ფიზიკური პროდუქტისთვის.

თქვენი ფიზიკური შტრიხკოდის და ელექტრონული პროდუქტის კოდის (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 ხშირად დასმული კითხვები

  • ეს აცნობებს სისტემას ტეგის შეფუთვის დონეს. თუ სისტემა კითხულობს 'Case' ტეგს (ფილტრი 2), მან იცის, რომ ის შეიცავს მრავალ ერთეულს. ეს ხელს უშლის ორმაგად დათვლას (მაგ., ქეისის დათვლა, როგორც ერთი ერთეული) და იძლევა გადაზიდვის სწორი ვერიფიკაციის საშუალებას.
  • Case (ფილტრი 2) არის ძირითადი გადაზიდვის ერთეული, რომელიც გამოიყენება ტრანსპორტირებისთვის. Inner Pack (ფილტრი 4) არის ქვედანაყოფი ამ ქეისში, ჩვეულებრივ, უფრო მარტივი დამუშავებისთვის ან ჩვენებისთვის (როგორიცაა 6-პაკეტი 24-ქილა ქეისში). ლოგისტიკური სისტემები აკონტროლებენ ქეისებს; მაღაზიის ოპერაციებმა შეიძლება ეფექტურად იმუშაონ Inner Packs-თან.
  • გაშიფვრა ვერ მოხდება ან წარმოქმნის არასწორ შტრიხკოდს. Partition ზუსტად განსაზღვრავს, სად მთავრდება Company Prefix და იწყება Item Reference. თუ ეს 'გაყოფის წერტილი' არასწორია, თქვენ მიიღებთ სხვა Company Code-ს, ვიდრე განზრახული იყო.
  • სტანდარტული GTIN (შტრიხკოდი) მხოლოდ განსაზღვრავს პროდუქტის ტიპს (მაგ., '12oz Soda'). SGTIN-96 ამატებს სერიულ ნომერს, რაც თითოეულ ქილას უნიკალურ იდენტობას ანიჭებს. ეს იძლევა ნივთის დონის თვალყურის დევნების საშუალებას, რაც საშუალებას გაძლევთ თვალყური ადევნოთ ზუსტად რომელი კონკრეტული ნივთი გაიყიდა, მოიპარეს ან ვადა გაუვიდა.
  • დიახ. როგორც ნაჩვენებია ზემოთ მოცემულ კონვერტორში, SGTIN-96 სტრიქონი შეიცავს სრულ GTIN-14-ს. სერიული ნომრისა და სათაურის ინფორმაციის ამოღებით, თქვენ შეგიძლიათ სრულყოფილად აღადგინოთ ორიგინალური საცალო შტრიხკოდი.
  • Header (0x30) არის სტანდარტული 8-ბიტიანი პრეფიქსი, რომელიც განსაზღვრულია GS1-ის მიერ. ის უბრალოდ ეუბნება ნებისმიერ RFID მკითხველს: "ეს ტეგი დაშიფრულია SGTIN-96 სტანდარტის გამოყენებით." სხვა სათაურები არსებობს სხვადასხვა სტანდარტებისთვის (როგორიცაა SSCC პალეტებისთვის ან GIAI აქტივებისთვის).