RFID Kode Bihurgailua
RFID Bihurgailua
RFID Hex (SGTIN-96) eta GS1 Barra-kodea (GTIN) + Serie-zenbakia arteko bihurketa.
EPC URIs
Kode logika eta urratsez urrats
// 1. Binary Conversion
// 2. Extract Fields (Bit Slice)
// 3. Determine Partition Rule (Partition 5)
// 4. Extract Company, Item & Serial
Garatzaile Kodea
Erabili utilitate logika hau zure proiektuan. Aukeratu hizkuntza behean.
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}Nola Dabil
SGTIN-96 96-bit-eko kate binarioa da, 6 zatitan banatuta:
001100000x30Aurrizki estandarra (00110000) hau SGTIN-96 dela identifikatzen duena.
0113Objektu-mota (adib. 1 = Banaketa txikikoa). Ikusi erreferentzia-gida behean.
1015Partition 5 honek esan nahi du: Enpresa-kodeak 24 bit hartzen ditu, Produktu-kodeak 20 bit hartzen ditu.
1000100001010111110000118935363GS1ek esleitutako enpresa-kode bakarra.
00010111011001011101095837Zure produktu-kode espezifikoa.
000000000000000000000000000000000000011Identifikatzaile bakarra produktu fisiko bakoitzerako.
SGTIN eta GTIN ulertzea
Zure barra-kode fisikoaren eta produktu-kode elektronikoaren (EPC) arteko erlazioa irudikatzen.

Kodeketaren logika (urratsez urrats)
- 1. urratsa: Zehaztu EPC eskemarako balio binarioaren goiburua. SGTIN-96ren goiburu binarioaren balioa "00110000" da.
- 2. urratsa: Aukeratu Partition balioa Enpresa aurrizkiko zifra kopuruaren arabera Partition balio taulatik.
- 3. urratsa: Bihurtu Filter balioa, Partition balioa, Enpresa aurrizkia, Artikulu erreferentzia eta Serie-zenbakia balio binarioetan.
- 4. urratsa: Katenatu ordena honetan Header, Filter, Partition, Enpresa aurrizkia, Artikulu erreferentzia eta Serie-zenbakia balio binarioak EPC Binarioa osatzeko.
SGTIN-96 Erreferentzia-gida
| Balioa | Deskribapena |
|---|---|
| 0 | Beste guztiak Beste kategoriatan sartzen ez diren elementuentzat erabiltzen da. Oso gutxitan erabiltzen da salmenta orokorrean. |
| 1 | Salmenta-puntuko (POS) salgaia Kontsumo-unitate estandarra salmenta-puntuan saltzen dena. Adibidea: Champuaren botila bat. |
| 2 | Garraiorako kaxa osoa Artikulu anitz dituen bidalketa-unitate estandarra. Adibidea: 12 champu-botilako kartoia. Logistikan funtsezkoa da 'kaxa bat' eta 'artikulu bat' bereiztea. |
| 3 | Erreserbatuta Etorkizunerako erreserbatuta. |
| 4 | Barne-pakete salgaien multzokatzea Kaxa osoa baino txikiagoa den multzokatzea, normalean erakustarako edo manipulaziorako. Adibidea: Kartoiko 3 pakete biltzen dituen shrink-wrapped bat. |
| 5 | Erreserbatuta Etorkizunerako erreserbatuta. |
| 6 | Unitate-karga Unitate logistiko handia, normalean kaxa anitz dituen paleta bat. |
| 7 | Kontsumo-unitatearen barruko osagaia Kontsumo-unitatearen barruko zati zehatza. Adibidea: Jostailu baten bateriaren estalkia. |
| Balioa | Enpresa aurrizkia | Artikulu erreferentzia |
|---|---|---|
| 0 | 40 Bitak / 12 Zifrak | 4 Bitak / 1 Zifrak |
| 1 | 37 Bitak / 11 Zifrak | 7 Bitak / 2 Zifrak |
| 2 | 34 Bitak / 10 Zifrak | 10 Bitak / 3 Zifrak |
| 3 | 30 Bitak / 9 Zifrak | 14 Bitak / 4 Zifrak |
| 4 | 27 Bitak / 8 Zifrak | 17 Bitak / 5 Zifrak |
| 5 | 24 Bitak / 7 Zifrak | 20 Bitak / 6 Zifrak |
| 6 | 20 Bitak / 6 Zifrak | 24 Bitak / 7 Zifrak |
SGTIN-96ren Maiz Egiten Diren Galderak
- Sistemari etiketaren pakete-maila adierazten dio. Sistema batek 'Kaxa' etiketa (Filter 2) irakurtzen badu, badaki artikulu anitz dituela. Honek bi aldiz zenbatzea eragozten du (adib., kaxa bat unitate bakartzat zenbatzea) eta bidalketa egiaztatzea ahalbidetzen du.
- Kaxa (Filter 2) garraiorako erabiltzen den bidalketa-unitate nagusia da. Barne-pakete (Filter 4) kaxa horren barruko azpibanaketa da, normalean manipulazioa edo erakustarako errazteko (adib., 24 latako kaxa baten barruko 6 paketea). Sistema logistikoek Kaxak jarraitzen dituzte; saltokietako eragiketek barne-paketeak kudeatu ditzakete eraginkortasunez.
- Dekodetzeak huts egingo du edo barra-kode okerra sortuko du. Partitionek zehazki zehazten du non amaitzen den Enpresa aurrizkia eta non hasten den Artikulu erreferentzia. 'Banaketa-puntua' oker badago, nahi ez den Enpresa-kode desberdina lortuko duzu.
- GTIN estandarrak (Barra-kodeak) produktu-mota soilik identifikatzen du (adib., '330ml soda'). SGTIN-96k Serie-zenbakia gehitzen du, eta latako bakoitzari identitate bakarra ematen dio. Honek artikulu-mailako trazabilitatea ahalbidetzen du, zehatz-mehatz jarraitzeko zein artikulu espezifiko saldu, lapurtu edo iraungi zen.
- Bai. Konbertidorean erakusten den bezala, SGTIN-96 kateak GTIN-14 osoa du. Serie-zenbakia eta goiburuko informazioa kenduta, jatorrizko salmenta Barra-kodea guztiz berreraiki dezakezu.
- Goiburua (0x30) GS1ek definitutako 8 biteko aurrizki estandarra da. Hori soilik esaten die RFID irakurle oro: "Etiketa hau SGTIN-96 estandarra erabiliz kodetuta dago." Beste goiburu batzuk daude beste estandar batzuentzat (adib., palletetarako SSCC edo aktiboetarako GIAI).