Engineering tools · EPC · GS1

RFID kodu konvertētājs

Konvertēšanas rīks starp SGTIN-96 (RFID heksadecimālais kods) un svītrkodu (GTIN) + sērijas numuru. Savietojams ar standarta RFID lasītājiem, piemēram, Zebra, Chainway, Impinj, Nextwaves. Balstīts uz GS1 EPC Tag Data Standard.

RFID konvertētājs

Konvertējiet starp RFID Hex (SGTIN-96) un GS1 svītrkodu (GTIN) + sērijas numuru.

Scheme:SGTIN-9696 bits / Header 0x30

Koda loģika un soli pa solim

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

Izstrādātāja kods

Izmantojiet šo utilītas loģiku savā projektā. Zemāk atlasiet valodu.

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}

Paskaidrot

SGTIN-96 ir 96 bitu bināra virkne, kas sadalīta 6 daļās:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Galvene (8 biti)Bits 0-8 (8)
001100000x30

Standarta prefikss (00110000), kas identificē šo kā SGTIN-96.

Filtrs (3 biti)Bits 8-11 (3)
0113

Objekta tips (piemēram, 1 = Mazumtirdzniecība). Skatiet atsauces ceļvedi zemāk.

Partīcija (3 biti)Bits 11-14 (3)
1015

Partīcija 5 nozīmē: Uzņēmuma kods aizņem 24 bitus, preces kods aizņem 20 bitus.

Uzņēmuma prefikssBits 14-38 (24)
1000100001010111110000118935363

Unikāls uzņēmuma kods, ko piešķir GS1.

Preces atsauceBits 38-58 (20)
00010111011001011101095837

Jūsu konkrētais produkta kods.

Sērijas numurs (38 biti)Bits 58-96 (38)
000000000000000000000000000000000000011

Unikāls identifikators katram konkrētam fiziskam produktam.

Vizualizē saikni starp jūsu fizisko svītrkodu un elektronisko produkta kodu (EPC).

Diagramma, kas parāda saikni starp svītrkodu (GTIN) un SGTIN-96 URI
  1. 1. solis: Nosakiet bināro galvenes vērtību EPC shēmai. Binārā galvenes vērtība SGTIN-96 ir “00110000”.
  2. 2. solis: Atlasiet partīcijas vērtību, pamatojoties uz uzņēmuma prefiksa ciparu skaitu no partīcijas vērtību tabulas.
  3. 3. solis: Konvertējiet filtra vērtību, partīcijas vērtību, uzņēmuma prefiksu, preces atsauci un sērijas numuru binārā vērtībā.
  4. 4. solis: Konkatenējiet secībā galveni, filtru, partīciju, uzņēmuma prefiksu, preces atsauci un sērijas numura binārās vērtības, lai izveidotu bināro EPC.

SGTIN-96 atsauces rokasgrāmata

VērtībaApraksts
0Visi pārējie
Izmanto priekšmetiem, kas neatbilst citām kategorijām. Reti izmanto vispārējā mazumtirdzniecībā.
1Tirdzniecības vieta (TV) tirdzniecības prece
Standarta patērētāja vienība, kas tiek pārdota tirdzniecības vietā. Piemērs: viena šampūna pudele.
2Pilns iepakojums transportēšanai
Standarta pārvadāšanas vienība, kas satur vairākus priekšmetus. Piemērs: 12 šampūna pudeļu kaste. Būtiski svarīgi loģistikai, lai atšķirtu 'vienu kasti' no 'viena priekšmeta'.
3Rezervēts
Rezervēts turpmākai lietošanai.
4Iekšējais iepakojums tirdzniecības preču grupēšanai
Grupējums, kas ir mazāks par pilnu kasti, bieži vien paredzēts plauktu izvietošanai vai apstrādei. Piemērs: saraušanās plēvē ietīts 3 iepakojumu komplekts galvenajā kartona kastē.
5Rezervēts
Rezervēts turpmākai lietošanai.
6Vienības krava
Liela loģistikas vienība, parasti palete, kas satur vairākus iepakojumus.
7Komponents patērētāja vienībā
Konkrēta daļa patērētāja vienībā. Piemērs: Baterijas vāciņš rotaļlietā.
VērtībaUzņēmuma prefikssPreces atsauce
040 Biti / 12 Cipari4 Biti / 1 Cipari
137 Biti / 11 Cipari7 Biti / 2 Cipari
234 Biti / 10 Cipari10 Biti / 3 Cipari
330 Biti / 9 Cipari14 Biti / 4 Cipari
427 Biti / 8 Cipari17 Biti / 5 Cipari
524 Biti / 7 Cipari20 Biti / 6 Cipari
620 Biti / 6 Cipari24 Biti / 7 Cipari

SGTIN-96 bieži uzdotie jautājumi

  • Tas norāda sistēmai tagu iepakojuma līmeni. Ja sistēma nolasa 'Kastes' tagu (Filtrs 2), tā zina, ka tajā ir vairāki priekšmeti. Tas novērš dubultu skaitīšanu (piemēram, kastes skaitīšanu kā tikai vienu vienību) un nodrošina derīgu sūtījuma verifikāciju.
  • Kaste (Filtrs 2) ir galvenā transportēšanai izmantotā sūtījuma vienība. Iekšējais iepakojums (Filtrs 4) ir apakšvienība šajā kastē, parasti ērtai apstrādei vai izstādīšanai (piemēram, 6 iepakojumi 24 kārbu kastē). Loģistikas sistēmas izseko kastes; Veikala operācijas var efektīvi apstrādāt iekšējos iepakojumus.
  • Atšifrēšana neizdosies vai radīs nepareizu svītrkodu. Partīcija precīzi nosaka, kur beidzas Uzņēmuma prefikss un sākas Preces atsauce. Ja šis 'sadalīšanas punkts' ir nepareizs, jūs saņemsiet citu Uzņēmuma kodu, nekā paredzēts.
  • Standarta GTIN (svītrkods) identificē tikai produkta veidu (piemēram, '12oz Soda'). SGTIN-96 pievieno sērijas numuru, piešķirot katrai atsevišķai kārbiņai unikālu identitāti. Tas nodrošina preču līmeņa izsekojamību, ļaujot precīzi izsekot, kura konkrētā prece tika pārdota, nozagta vai kurai beidzies derīguma termiņš.
  • Jā. Kā redzams iepriekšējā pārveidotājā, SGTIN-96 virkne satur pilnu GTIN-14. Noņemot sērijas numuru un galvenes informāciju, jūs varat perfekti rekonstruēt sākotnējo mazumtirdzniecības svītrkodu.
  • Galvene (0x30) ir standarta 8 bitu prefikss, ko definē GS1. Tas vienkārši norāda jebkuram RFID lasītājam: "Šis tags ir kodēts, izmantojot SGTIN-96 standartu." Ir arī citas galvenes dažādiem standartiem (piemēram, SSCC paletēm vai GIAI aktīviem).