Engineering tools · EPC · GS1

RFID Kode Bihurgailua

SGTIN-96 (RFID Hex) eta Barra-kodea (GTIN) + Serie-zenbakia arteko bihurgailu tresna. Zebra, Chainway, Impinj, Nextwaves bezalako RFID irakurle estandarrequin bateragarria. GS1 EPC Tag Data Standard-ean oinarritua.

RFID Bihurgailua

RFID Hex (SGTIN-96) eta GS1 Barra-kodea (GTIN) + Serie-zenbakia arteko bihurketa.

Scheme:SGTIN-9696 bits / Header 0x30

Kode logika eta urratsez urrats

// 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

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:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Goiburua (8 bit)Bits 0-8 (8)
001100000x30

Aurrizki estandarra (00110000) hau SGTIN-96 dela identifikatzen duena.

Iragazkia (3 bit)Bits 8-11 (3)
0113

Objektu-mota (adib. 1 = Banaketa txikikoa). Ikusi erreferentzia-gida behean.

Partizioa (3 bit)Bits 11-14 (3)
1015

Partition 5 honek esan nahi du: Enpresa-kodeak 24 bit hartzen ditu, Produktu-kodeak 20 bit hartzen ditu.

Enpresa-AurrizkiaBits 14-38 (24)
1000100001010111110000118935363

GS1ek esleitutako enpresa-kode bakarra.

Elementu-ErreferentziaBits 38-58 (20)
00010111011001011101095837

Zure produktu-kode espezifikoa.

Serie-zenbakia (38 bit)Bits 58-96 (38)
000000000000000000000000000000000000011

Identifikatzaile bakarra produktu fisiko bakoitzerako.

Zure barra-kode fisikoaren eta produktu-kode elektronikoaren (EPC) arteko erlazioa irudikatzen.

Barra-kodea (GTIN) eta SGTIN-96 URI arteko konexioa erakusten duen diagrama
  1. 1. urratsa: Zehaztu EPC eskemarako balio binarioaren goiburua. SGTIN-96ren goiburu binarioaren balioa "00110000" da.
  2. 2. urratsa: Aukeratu Partition balioa Enpresa aurrizkiko zifra kopuruaren arabera Partition balio taulatik.
  3. 3. urratsa: Bihurtu Filter balioa, Partition balioa, Enpresa aurrizkia, Artikulu erreferentzia eta Serie-zenbakia balio binarioetan.
  4. 4. urratsa: Katenatu ordena honetan Header, Filter, Partition, Enpresa aurrizkia, Artikulu erreferentzia eta Serie-zenbakia balio binarioak EPC Binarioa osatzeko.

SGTIN-96 Erreferentzia-gida

BalioaDeskribapena
0Beste guztiak
Beste kategoriatan sartzen ez diren elementuentzat erabiltzen da. Oso gutxitan erabiltzen da salmenta orokorrean.
1Salmenta-puntuko (POS) salgaia
Kontsumo-unitate estandarra salmenta-puntuan saltzen dena. Adibidea: Champuaren botila bat.
2Garraiorako kaxa osoa
Artikulu anitz dituen bidalketa-unitate estandarra. Adibidea: 12 champu-botilako kartoia. Logistikan funtsezkoa da 'kaxa bat' eta 'artikulu bat' bereiztea.
3Erreserbatuta
Etorkizunerako erreserbatuta.
4Barne-pakete salgaien multzokatzea
Kaxa osoa baino txikiagoa den multzokatzea, normalean erakustarako edo manipulaziorako. Adibidea: Kartoiko 3 pakete biltzen dituen shrink-wrapped bat.
5Erreserbatuta
Etorkizunerako erreserbatuta.
6Unitate-karga
Unitate logistiko handia, normalean kaxa anitz dituen paleta bat.
7Kontsumo-unitatearen barruko osagaia
Kontsumo-unitatearen barruko zati zehatza. Adibidea: Jostailu baten bateriaren estalkia.
BalioaEnpresa aurrizkiaArtikulu erreferentzia
040 Bitak / 12 Zifrak4 Bitak / 1 Zifrak
137 Bitak / 11 Zifrak7 Bitak / 2 Zifrak
234 Bitak / 10 Zifrak10 Bitak / 3 Zifrak
330 Bitak / 9 Zifrak14 Bitak / 4 Zifrak
427 Bitak / 8 Zifrak17 Bitak / 5 Zifrak
524 Bitak / 7 Zifrak20 Bitak / 6 Zifrak
620 Bitak / 6 Zifrak24 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).