RFID კოდის გადამყვანი
RFID კონვერტორი
გადაიყვანეთ RFID Hex (SGTIN-96) და GS1 შტრიხკოდს (GTIN) + სერიული ნომერი.
EPC URIs
კოდის ლოგიკა და ეტაპობრივად
// 1. Binary Conversion
// 2. Extract Fields (Bit Slice)
// 3. Determine Partition Rule (Partition 5)
// 4. Extract Company, Item & Serial
დეველოპერის კოდი
გამოიყენეთ ეს უტილიტის ლოგიკა თქვენს პროექტში. აირჩიეთ ენა ქვემოთ.
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 ნაწილად:
001100000x30სტანდარტული პრეფიქსი (00110000), რომელიც განსაზღვრავს ამას, როგორც SGTIN-96.
0113ობიექტის ტიპი (მაგ. 1 = საცალო ვაჭრობა). იხილეთ საცნობარო გზამკვლევი ქვემოთ.
1015პარტიცია 5 ნიშნავს: კომპანიის კოდი იღებს 24 ბიტს, პროდუქტის კოდი იღებს 20 ბიტს.
1000100001010111110000118935363უნიკალური კომპანიის კოდი, რომელიც მინიჭებულია GS1-ის მიერ.
00010111011001011101095837თქვენი კონკრეტული პროდუქტის კოდი.
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 ხშირად დასმული კითხვები
- ეს აცნობებს სისტემას ტეგის შეფუთვის დონეს. თუ სისტემა კითხულობს '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 აქტივებისთვის).