Μετατροπέας Κώδικα RFID

Εργαλείο μετατροπής μεταξύ SGTIN-96 (Hex RFID) και Barcode (GTIN) + Σειριακού Αριθμού. Συμβατό με τυπικούς αναγνώστες RFID όπως Zebra, Chainway, Impinj, Nextwaves. Βασισμένο στο GS1 EPC Tag Data Standard.

Μετατροπέας RFID

Λογική Κώδικα & Βήμα-Βήμα

// 1. Binary Conversion

src = bin(0x) // = "?"

// 2. Extract Fields (Bit Slice)

header = src[0:8] → "00110000""?" (?)
filter = src[8:11] → "..."?
partition = src[11:14] → "..."?

// 3. Determine Partition Rule (Partition ?)

rule = PARTITIONS[?]
// Company Bits: ?, Item Bits: ?

// 4. Extract Company & Item

company = src[14:14] → "..."?
itemRef = src[14:14] → "..."?
serial = src[14:96] → "..."?

Κωδικός Προγραμματιστή

Χρησιμοποιήστε αυτή τη λογική βοηθητικού προγράμματος στο έργο σας. Επιλέξτε μια γλώσσα παρακάτω.

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}

Επεξήγηση

Κατανόηση SGTIN & GTIN

Οπτικοποίηση της σχέσης μεταξύ του φυσικού barcode σας και του ηλεκτρονικού κωδικού προϊόντος (EPC).

Διάγραμμα που δείχνει τη σύνδεση μεταξύ Barcode (GTIN) και SGTIN-96 URI

Το SGTIN-96 είναι μια δυαδική ακολουθία 96-bit που χωρίζεται σε 6 μέρη:

HDR
FLT
PRT
COMPANY
ITEM
SERIAL (38)

Λεπτομερής Ανάλυση (Bit by Bit)

Κεφαλίδα (8 bit)Bits 0-8 (8)
00110000

Τυπικό πρόθεμα (00110000) που αναγνωρίζει αυτό ως SGTIN-96.

Φίλτρο (3 bit)Bits 8-11 (3)
...

Τύπος αντικειμένου (π.χ. 1 = Λιανική). Δείτε τον Οδηγό Αναφοράς παρακάτω.

Διαμέρισμα (3 bit)Bits 11-14 (3)
...

Το Διαμέρισμα X σημαίνει: Ο Κωδικός Εταιρείας καταλαμβάνει Y bits, ο Κωδικός Προϊόντος καταλαμβάνει Z bits.

Πρόθεμα ΕταιρείαςBits 14-0 (0)
...

Μοναδικός κωδικός εταιρείας που εκχωρεί η GS1.

Αναφορά ΕίδουςBits 0-0 (0)
...

Ο συγκεκριμένος κωδικός προϊόντος σας.

Σειριακός Αριθμός (38 bit)Bits 0-96 (38)
...

Μοναδικό αναγνωριστικό για κάθε συγκεκριμένο φυσικό προϊόν.

Λογική Κωδικοποίησης (Βήμα-Βήμα)

  1. Βήμα 1: Προσδιορίστε την δυαδική τιμή κεφαλίδας για το σχήμα EPC. Η δυαδική τιμή κεφαλίδας για το SGTIN-96 είναι “00110000.”
  2. Βήμα 2: Επιλέξτε την Τιμή Διαμερίσματος βάσει του αριθμού των ψηφίων στο Πρόθεμα Εταιρείας από τον Πίνακα Τιμών Διαμερίσματος.
  3. Βήμα 3: Μετατρέψτε την Τιμή Φίλτρου, την Τιμή Διαμερίσματος, το Πρόθεμα Εταιρείας, την Αναφορά Είδους και τον Σειριακό Αριθμό σε δυαδική τιμή.
  4. Βήμα 4: Συνδέστε με τη σειρά τις δυαδικές τιμές της Κεφαλίδας, του Φίλτρου, του Διαμερίσματος, του Προθέματος Εταιρείας, της Αναφοράς Είδους και του Σειριακού Αριθμού για να δημιουργήσετε το Δυαδικό EPC.

Οδηγός Αναφοράς SGTIN-96

FΦίλτρο Τιμών (3 bits)

ΤιμήΠεριγραφή
0
Όλα τα άλλα
Χρησιμοποιείται για είδη που δεν ταιριάζουν σε άλλες κατηγορίες. Σπάνια χρησιμοποιείται στη γενική λιανική.
1
Αντικείμενο Εμπορίου Σημείου Πώλησης (POS)
Η τυπική μονάδα καταναλωτή που πωλείται στο Σημείο Πώλησης. Παράδειγμα: Μία μπουκάλι σαμπουάν.
2
Πλήρης Κουτί για Μεταφορά
Μία τυπική μονάδα αποστολής που περιέχει πολλαπλά είδη. Παράδειγμα: Ένα κιβώτιο με 12 μπουκάλια σαμπουάν. Κρίσιμο για τη λογιστική ώστε να διακρίνει το 'ένα κουτί' από το 'ένα είδος'.
3
Δεσμευμένο
Δεσμευμένο για μελλοντική χρήση.
4
Ομαδοποίηση Εσωτερικής Συσκευασίας Εμπορίου
Μια ομαδοποίηση μικρότερη από ένα πλήρες κουτί, συχνά για προβολή στο ράφι ή χειρισμό. Παράδειγμα: Ένα τριπλό πακέτο σε συρραφή εντός του κύριου κιβωτίου.
5
Δεσμευμένο
Δεσμευμένο για μελλοντική χρήση.
6
Φορτίο Μονάδας
Μια μεγάλη λογιστική μονάδα, συνήθως ένα παλέτο που περιέχει πολλαπλές θήκες.
7
Συστατικό εντός Μονάδας Καταναλωτή
Ένα συγκεκριμένο μέρος εντός μιας μονάδας καταναλωτή. Παράδειγμα: Το κάλυμμα μπαταρίας μέσα σε ένα παιχνίδι.

PΠίνακας Κατατμήσεων (3 bits)

Τιμή
Πρόθεμα Εταιρείας
(Bit / Ψηφία)
Αναφορά Είδους
(Bit / Ψηφία)
040 / 124 / 1
137 / 117 / 2
234 / 1010 / 3
330 / 914 / 4
427 / 817 / 5
524 / 720 / 6
620 / 624 / 7

Συχνές Ερωτήσεις SGTIN-96