Engineering tools · EPC · GS1
Chuyển đổi mã RFID
Công cụ chuyển đổi giữa SGTIN-96 (RFID Hex) và Mã vạch (GTIN) + Số Serial. Tương thích với các loại đầu đọc RFID chuẩn như Zebra, Chainway, Impinj, Nextwaves. Dựa trên Tiêu chuẩn Dữ liệu thẻ GS1 EPC.
Bộ chuyển đổi RFID
Chuyển đổi qua lại giữa mã RFID Hex (SGTIN-96) và Mã vạch GS1 (GTIN) + Số Serial.
Scheme:SGTIN-9696 bits / Header 0x30
EPC URIs
Logic mã & Từng bước
// 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
Code cho lập trình viên
Đoạn code mẫu (Snippet) để tích hợp chuyển đổi SGTIN-96 vào ứng dụng
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}Nguyên lý hoạt động
SGTIN-96 là chuỗi nhị phân 96-bit được chia thành 6 phần:
HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Header (8 bit)Bits 0-8 (8)
001100000x30Tiền tố chuẩn (00110000) định danh đây là mã SGTIN-96.
Filter (3 bit)Bits 8-11 (3)
0113Loại đối tượng (ví dụ: 1 = Hàng bán lẻ). Xem bảng tham khảo bên dưới.
Partition (3 bit)Bits 11-14 (3)
1015Partition 5 nghĩa là: Mã Công Ty chiếm 24 bit, Mã Sản Phẩm chiếm 20 bit.
Mã công tyBits 14-38 (24)
1000100001010111110000118935363Mã doanh nghiệp duy nhất do GS1 cấp.
Mã sản phẩmBits 38-58 (20)
00010111011001011101095837Mã sản phẩm cụ thể của bạn.
Số Serial (38 bit)Bits 58-96 (38)
000000000000000000000000000000000000011Số định danh duy nhất cho từng sản phẩm vật lý cụ thể.
Hiểu về SGTIN & GTIN
Trực quan hóa mối quan hệ giữa mã vạch vật lý của bạn và mã sản phẩm điện tử (EPC).

Logic Mã Hóa (Từng bước)
- Bước 1: Xác định giá trị header nhị phân. Giá trị header cho SGTIN-96 là “00110000.”
- Bước 2: Chọn Giá trị Partition dựa trên số chữ số trong Tiền tố Công ty.
- Bước 3: Chuyển đổi Filter, Partition, Tiền tố Công ty, Tham chiếu Mặt hàng và Số Serial sang nhị phân.
- Bước 4: Nối các giá trị Header, Filter, Partition, Tiền tố Công ty, Tham chiếu Mặt hàng và Số Serial để tạo thành EPC Nhị phân.
Hướng dẫn Tham khảo SGTIN-96
| Giá trị | Mô tả |
|---|---|
| 0 | Tất cả các loại khác (All Others) Dùng cho các mục không thuộc danh mục khác. Hiếm khi sử dụng trong bán lẻ thông thường. |
| 1 | Mặt hàng bán lẻ (POS Trade Item) Đơn vị tiêu dùng tiêu chuẩn bán tại điểm bán hàng (POS). Ví dụ: Một chai dầu gội. |
| 2 | Thùng hàng vận chuyển (Full Case) Đơn vị vận chuyển tiêu chuẩn chứa nhiều mặt hàng. Ví dụ: Thùng carton chứa 12 chai dầu gội. Quan trọng cho logistics để phân biệt 'một thùng' và 'một cái'. |
| 3 | Dự phòng (Reserved) Dành riêng cho sử dụng trong tương lai. |
| 4 | Nhóm mặt hàng bên trong (Inner Pack) Nhóm nhỏ hơn thùng đầy đủ, thường để trưng bày hoặc xử lý. Ví dụ: Lốc 3 chai được bọc màng co bên trong thùng chính. |
| 5 | Dự phòng (Reserved) Dành riêng cho sử dụng trong tương lai. |
| 6 | Đơn vị tải (Unit Load) Đơn vị logistics lớn, thường là một pallet chứa nhiều thùng hàng. |
| 7 | Thành phần bên trong (Component) Một bộ phận cụ thể bên trong đơn vị tiêu dùng. Ví dụ: Nắp pin bên trong đồ chơi. |
| Giá trị | Mã Công Ty | Mã Sản Phẩm |
|---|---|---|
| 0 | 40 Bit / 12 Số | 4 Bit / 1 Số |
| 1 | 37 Bit / 11 Số | 7 Bit / 2 Số |
| 2 | 34 Bit / 10 Số | 10 Bit / 3 Số |
| 3 | 30 Bit / 9 Số | 14 Bit / 4 Số |
| 4 | 27 Bit / 8 Số | 17 Bit / 5 Số |
| 5 | 24 Bit / 7 Số | 20 Bit / 6 Số |
| 6 | 20 Bit / 6 Số | 24 Bit / 7 Số |
Câu hỏi thường gặp về SGTIN-96
- Nó cho hệ thống biết cấp độ đóng gói của thẻ. Nếu hệ thống đọc thẻ 'Thùng' (Filter 2), nó biết thẻ đó chứa nhiều mặt hàng. Điều này ngăn việc đếm sai (ví dụ: đếm một thùng là một đơn vị lẻ) và cho phép xác minh vận chuyển hợp lệ.
- Thùng (Filter 2) là đơn vị vận chuyển chính. Nhóm bên trong (Filter 4) là phần chia nhỏ bên trong thùng đó, thường để dễ xử lý hoặc trưng bày (như lốc 6 lon trong thùng 24 lon). Hệ thống logistics theo dõi Thùng; Hoạt động cửa hàng có thể xử lý Nhóm bên trong.
- Việc giải mã sẽ thất bại hoặc tạo ra Mã vạch sai. Partition xác định chính xác điểm kết thúc của Mã Công Ty và điểm bắt đầu của Mã Sản Phẩm. Nếu 'điểm chia' này sai, bạn sẽ nhận được Mã Công Ty khác với dự định.
- GTIN chuẩn (Mã vạch) chỉ xác định loại sản phẩm (ví dụ: 'Lon nước 330ml'). SGTIN-96 thêm Số Serial, mang lại cho mỗi lon một định danh duy nhất. Điều này cho phép truy xuất nguồn gốc cấp mặt hàng, giúp bạn theo dõi chính xác mặt hàng nào đã được bán, bị đánh cắp hoặc hết hạn.
- Có. Như đã thấy trong bộ chuyển đổi ở trên, chuỗi SGTIN-96 chứa toàn bộ GTIN-14. Bằng cách loại bỏ Số Serial và thông tin header, bạn có thể tái tạo hoàn hảo mã vạch bán lẻ ban đầu.
- Header (0x30) là một tiền tố chuẩn 8-bit được định nghĩa bởi GS1. Nó đơn giản nói với bất kỳ đầu đọc RFID nào: "Thẻ này được mã hóa bằng chuẩn SGTIN-96." Các header khác tồn tại cho các chuẩn khác (như SSCC cho pallet hoặc GIAI cho tài sản).