Convertidor de codi RFID
Convertidor RFID
Converteix entre RFID Hex (SGTIN-96) i codi de barres GS1 (GTIN) + Número de sèrie.
EPC URIs
Lògica del codi i pas a pas
// 1. Binary Conversion
// 2. Extract Fields (Bit Slice)
// 3. Determine Partition Rule (Partition 5)
// 4. Extract Company, Item & Serial
Codi per a desenvolupadors
Utilitzeu aquesta lògica d'utilitat al vostre projecte. Seleccioneu un llenguatge a continuació.
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}Explicació
SGTIN-96 és una cadena binària de 96 bits dividida en 6 parts:
001100000x30Prefix estàndard (00110000) que identifica això com SGTIN-96.
0113Tipus d'objecte (p. ex. 1 = Producte de venda al detall). Vegeu la guia de referència a continuació.
1015Partició 5 significa: El codi d'empresa ocupa 24 bits, El codi de producte ocupa 20 bits.
1000100001010111110000118935363Codi d'empresa únic assignat per GS1.
00010111011001011101095837El vostre codi de producte específic.
000000000000000000000000000000000000011Identificador únic per a cada producte físico específic.
Comprendre SGTIN i GTIN
Visualitzant la relació entre el vostre codi de barres físico i el codi de producte electrònic (EPC).

Lògica de codificació (pas a pas)
- Pas 1: Determineu el valor de capçalera binària per a l'esquema EPC. El valor de capçalera binària per a SGTIN-96 és "00110000".
- Pas 2: Seleccioneu el valor de partició basat en el nombre de dígits del prefix d'empresa des de la taula de valors de partició.
- Pas 3: Convertiu el valor de filtre, valor de partició, prefix d'empresa, referència d'article i número de sèrie a valor binari.
- Pas 4: Concatenau en ordre els valors binaris de capçalera, filtre, partició, prefix d'empresa, referència d'article i número de sèrie per formar l'EPC binari.
Guia de referència SGTIN-96
| Valor | Descripció |
|---|---|
| 0 | Altres Utilitzat per a articles que no encaixen en altres categories. Rarament utilitzat en venda al detall general. |
| 1 | Article de punt de venda (POS) La unitat de consum estàndard venuda al punt de venda. Exemple: Una ampolla de xampú individual. |
| 2 | Caixa completa per a transport Una unitat d'enviament estàndard que conté múltiples articles. Exemple: Un cartró de 12 ampolles de xampú. Crític per a logística per distingir 'una caixa' d''un article'. |
| 3 | Reservat Reservat per a ús futur. |
| 4 | Agrupació d'interior de paquet Una agrupació més petita que una caixa completa, sovint per a exhibició o manipulació. Exemple: Un paquet de 3 unitats embolicades amb plàstic dins del cartró principal. |
| 5 | Reservat Reservat per a ús futur. |
| 6 | Càrrega unitària Una unitat logística gran, típicament un palet que conté múltiples caixes. |
| 7 | Component dins d'unitat de consum Una part específica dins d'una unitat de consum. Exemple: La tapa de bateria dins d'una joguina. |
| Valor | Prefix d'empresa | Referència d'article |
|---|---|---|
| 0 | 40 Bits / 12 Dígits | 4 Bits / 1 Dígits |
| 1 | 37 Bits / 11 Dígits | 7 Bits / 2 Dígits |
| 2 | 34 Bits / 10 Dígits | 10 Bits / 3 Dígits |
| 3 | 30 Bits / 9 Dígits | 14 Bits / 4 Dígits |
| 4 | 27 Bits / 8 Dígits | 17 Bits / 5 Dígits |
| 5 | 24 Bits / 7 Dígits | 20 Bits / 6 Dígits |
| 6 | 20 Bits / 6 Dígits | 24 Bits / 7 Dígits |
Preguntes frequients sobre SGTIN-96
- Indica al sistema el nivell d'embalatge de l'etiqueta. Si un sistema llegeix una etiqueta de 'Caixa' (Filtre 2), sap que conté múltiples articles. Això evita el recompte doble (p. ex., comptar una caixa com una sola unitat) i permet la verificació d'enviament vàlida.
- Caixa (Filtre 2) és la unitat d'enviament principal utilitzada per al transport. Paquet interior (Filtre 4) és una subdivisió dins d'aquesta caixa, usualment per a manipulació o exhibició més fàcil (com un paquet de 6 dins d'una caixa de 24). Els sistemes de logística fan seguiment de caixes; Les operacions de botiga poden gestionar eficientment paquets interiors.
- La decodificació fallarà o produirà el codi de barres equivocat. La Partició determina exactament on acaba el prefix d'empresa i on comença la referència d'article. Si aquest 'punt de divisió' és incorrecte, obtindreu un codi d'empresa diferent del previst.
- El GTIN estàndard (codi de barres) només identifica el tipus de producte (p. ex., 'Refresc de 330ml'). SGTIN-96 afegeix un número de sèrie, donant a cada llauna una identitat única. Això permet la traçabilitat a nivell d'article, permetent-vos fer seguiment exacte de quin article específic va ser venut, robat o caducat.
- Sí. Com es mostra al convertidor anterior, la cadena SGTIN-96 conté el GTIN-14 complet. Eliminant el número de sèrie i la informació de capçalera, podeu reconstruir perfectament el codi de barres de venda al detall original.
- La Capçalera (0x30) és un prefix estàndard de 8 bits definit per GS1. Simplement diu a qualsevol lector RFID: "Aquesta etiqueta està codificada utilitzant l'estàndard SGTIN-96." Altres capçaleres existeixen per a diferents estàndards (com SSCC per a palets o GIAI per a actius).