Convertor de Cod RFID
Convertor RFID
Convertiți între RFID Hex (SGTIN-96) și codul de bare GS1 (GTIN) + Număr de serie.
EPC URIs
Logica codului și instrucțiuni pas cu pas
// 1. Binary Conversion
// 2. Extract Fields (Bit Slice)
// 3. Determine Partition Rule (Partition 5)
// 4. Extract Company, Item & Serial
Cod Dezvoltator
Utilizați această logică utilitară în proiectul dvs. Selectați o limbă mai jos.
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}Explică
SGTIN-96 este un șir binar de 96 de biți împărțit în 6 părți:
001100000x30Prefix standard (00110000) care identifică acest lucru ca SGTIN-96.
0113Tipul de obiect (de exemplu, 1 = Retail Retail). Consultați Ghidul de referință de mai jos.
1015Partiția 5 înseamnă: Codul companiei ocupă 24 biți, Codul produsului ocupă 20 biți.
1000100001010111110000118935363Cod unic al companiei atribuit de GS1.
00010111011001011101095837Codul specific al produsului dumneavoastră.
000000000000000000000000000000000000011Identificator unic pentru fiecare produs fizic specific.
Înțelegerea SGTIN & GTIN
Vizualizarea relației dintre codul de bare fizic și codul electronic al produsului (EPC).

Logica de codare (Pas cu pas)
- Pasul 1: Determinați valoarea antetului binar pentru schema EPC. Valoarea antetului binar pentru SGTIN-96 este „00110000”.
- Pasul 2: Selectați Valoarea Partiției pe baza numărului de cifre din Prefixul Companiei din Tabelul Valorilor Partiției.
- Pasul 3: Convertiți Valoarea Filtrului, Valoarea Partiției, Prefixul Companiei, Referința Articolului și Numărul de serie în valoare binară.
- Pasul 4: Concatenati în ordine Antetul, Filtrul, Partiția, Prefixul Companiei, Referința Articolului și valorile binare ale Numărului de serie pentru a forma EPC-ul Binar.
Ghid de Referință SGTIN-96
| Valoare | Descriere |
|---|---|
| 0 | Toate celelalte Utilizat pentru articolele care nu se încadrează în alte categorii. Rareori utilizat în comerțul cu amănuntul general. |
| 1 | Articol comercial de la punctul de vânzare (POS) Unitatea standard de consum vândută la punctul de vânzare. Exemplu: O singură sticlă de șampon. |
| 2 | Carcasă completă pentru transport O unitate de expediere standard care conține mai multe articole. Exemplu: Un carton cu 12 sticle de șampon. Critic pentru logistică pentru a distinge „o carcasă” de „un articol”. |
| 3 | Rezervat Rezervat pentru utilizare viitoare. |
| 4 | Gruparea articolelor comerciale din pachetul interior O grupare mai mică decât o carcasă completă, adesea pentru afișare pe raft sau manipulare. Exemplu: Un pachet de 3 bucăți înfoliat în interiorul cartonului principal. |
| 5 | Rezervat Rezervat pentru utilizare viitoare. |
| 6 | Încărcare unitate O unitate logistică mare, de obicei un palet care conține mai multe cutii. |
| 7 | Componentă în interiorul Unității de Consum O parte specifică din interiorul unei unități de consum. Exemplu: Capacul bateriei din interiorul unei jucării. |
| Valoare | Prefixul companiei | Referința articolului |
|---|---|---|
| 0 | 40 Biți / 12 Cifre | 4 Biți / 1 Cifre |
| 1 | 37 Biți / 11 Cifre | 7 Biți / 2 Cifre |
| 2 | 34 Biți / 10 Cifre | 10 Biți / 3 Cifre |
| 3 | 30 Biți / 9 Cifre | 14 Biți / 4 Cifre |
| 4 | 27 Biți / 8 Cifre | 17 Biți / 5 Cifre |
| 5 | 24 Biți / 7 Cifre | 20 Biți / 6 Cifre |
| 6 | 20 Biți / 6 Cifre | 24 Biți / 7 Cifre |
Întrebări frecvente SGTIN-96
- Acesta spune sistemului nivelul de ambalare al tag-ului. Dacă un sistem citește un tag 'Case' (Filtru 2), știe că acesta conține mai multe articole. Acest lucru previne dubla numărare (de exemplu, numărarea unei cutii ca o singură unitate) și permite verificarea validă a expedierii.
- Case (Filtru 2) este unitatea principală de expediere utilizată pentru transport. Inner Pack (Filtru 4) este o subdiviziune în interiorul acelei cutii, de obicei pentru o manipulare sau afișare mai ușoară (cum ar fi un pachet de 6 în interiorul unei cutii de 24 de cutii). Sistemele logistice urmăresc Case; Operațiunile magazinului ar putea gestiona eficient Inner Packs.
- Decodarea va eșua sau va produce codul de bare greșit. Partition determină exact unde se termină Prefixul Companiei și începe Referința Articolului. Dacă acest 'punct de separare' este greșit, veți obține un Cod de Companie diferit de cel dorit.
- Standardul GTIN (Barcode) identifică doar tipul de produs (de exemplu, 'Soda 12oz'). SGTIN-96 adaugă un Număr de Serie, oferind fiecărei cutii o identitate unică. Acest lucru permite trasabilitatea la nivel de articol, permițându-vă să urmăriți exact ce articol specific a fost vândut, furat sau expirat.
- Da. După cum se arată în convertorul de mai sus, șirul SGTIN-96 conține GTIN-14 complet. Prin eliminarea Numărului de Serie și a informațiilor din antet, puteți reconstrui perfect codul de bare original de vânzare cu amănuntul.
- Header (0x30) este un prefix standard de 8 biți definit de GS1. Acesta spune pur și simplu oricărui cititor RFID: "Acest tag este codificat folosind standardul SGTIN-96." Există alte antete pentru diferite standarde (cum ar fi SSCC pentru paleți sau GIAI pentru active).