Engineering tools · EPC · GS1

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

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

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

Μετατροπή μεταξύ RFID Hex (SGTIN-96) και Γραμμωτού Κώδικα GS1 (GTIN) + Σειριακού Αριθμού.

Scheme:SGTIN-9696 bits / Header 0x30

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

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

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

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

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-96 είναι μια δυαδική συμβολοσειρά 96-bit χωρισμένη σε 6 μέρη:

HDRFLTPRTCMP (24)ITEM (20)SERIAL (38)
Επικεφαλίδα (8 bit)Bits 0-8 (8)
001100000x30

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

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

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

Διαμερισμός (3 bit)Bits 11-14 (3)
1015

Ο διαμερισμός 5 σημαίνει: Ο Κωδικός Εταιρείας παίρνει 24 bits, Ο Κωδικός Προϊόντος παίρνει 20 bits.

Πρόθεμα ΕταιρείαςBits 14-38 (24)
1000100001010111110000118935363

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

Αναφορά ΑντικειμένουBits 38-58 (20)
00010111011001011101095837

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

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

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

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

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

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

ΤιμήΠεριγραφή
0Όλα τα Άλλα
Χρησιμοποιείται για αντικείμενα που δεν ταιριάζουν σε άλλες κατηγορίες. Σπάνια χρησιμοποιείται στη γενική λιανική.
1Αντικείμενο Εμπορίου Σημείου Πώλησης (POS)
Η τυπική καταναλωτική μονάδα που πωλείται στο Σημείο Πώλησης. Παράδειγμα: Ένα μπουκάλι σαμπουάν.
2Πλήρες Κιβώτιο για Μεταφορά
Μια τυπική μονάδα αποστολής που περιέχει πολλαπλά αντικείμενα. Παράδειγμα: Ένα κιβώτιο με 12 μπουκάλια σαμπουάν. Κρίσιμο για τη διαχείριση logistics για διάκριση 'ένα κιβώτιο' από 'ένα αντικείμενο'.
3Δεσμευμένο
Δεσμευμένο για μελλοντική χρήση.
4Ομαδοποίηση Εσωτερικής Συσκευασίας
Μια ομαδοποίηση μικρότερη από πλήρες κιβώτιο, συνήθως για ραφιέ ή χειρισμό. Παράδειγμα: Μια συσκευασία 3 τεμαχίων μέσα στο κύριο κιβώτιο.
5Δεσμευμένο
Δεσμευμένο για μελλοντική χρήση.
6Φορτίο Μονάδας
Μια μεγάλη μονάδα logistics, συνήθως μια παλέτα που περιέχει πολλαπλά κιβώτια.
7Συστατικό εντός Καταναλωτικής Μονάδας
Ένα συγκεκριμένο μέρος μέσα σε καταναλωτική μονάδα. Παράδειγμα: Το κάλυμμα μπαταρίας μέσα σε παιχνίδι.
ΤιμήΠρόθεμα ΕταιρείαςΑναφορά Αντικειμένου
040 Bits / 12 Ψηφία4 Bits / 1 Ψηφία
137 Bits / 11 Ψηφία7 Bits / 2 Ψηφία
234 Bits / 10 Ψηφία10 Bits / 3 Ψηφία
330 Bits / 9 Ψηφία14 Bits / 4 Ψηφία
427 Bits / 8 Ψηφία17 Bits / 5 Ψηφία
524 Bits / 7 Ψηφία20 Bits / 6 Ψηφία
620 Bits / 6 Ψηφία24 Bits / 7 Ψηφία

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

  • Λέει στο σύστημα το επίπεδο συσκευασίας της ετικέτας. Αν ένα σύστημα διαβάσει μια ετικέτα 'Κιβωτίου' (Φίλτρο 2), ξέρει ότι περιέχει πολλαπλά αντικείμενα. Αυτό αποτρέπει τη διπλή καταμέτρηση (π.χ. καταμέτρηση ενός κιβωτίου ως μία μονάδα) και επιτρέπει έγκυρη επαλήθευση αποστολής.
  • Το Κιβώτιο (Φίλτρο 2) είναι η κύρια μονάδα αποστολής που χρησιμοποιείται για μεταφορά. Η Εσωτερική Συσκευασία (Φίλτρο 4) είναι ένα υποδιαίρεση μέσα σε εκείνο το κιβώτιο, συνήθως για ευκολότερο χειρισμό ή ραφιέ (όπως μια συσκευασία 6 μέσα σε κιβώτιο 24). Τα συστήματα logistics παρακολουθούν Κιβώτια· οι λειτουργίες καταστήματος μπορεί να χειρίζονται αποδοτικά Εσωτερικές Συσκευασίες.
  • Η αποκωδικοποίηση θα αποτύχει ή θα παράγει λάθος Γραμμωτό Κώδικα. Ο Διαμερισμός καθορίζει ακριβώς πού τελειώνει το Πρόθεμα Εταιρείας και πού αρχίζει η Αναφορά Αντικειμένου. Αν αυτό το 'σημείο διχοτόμησης' είναι λάθος, θα λάβετε διαφορετικό Κωδικό Εταιρείας από τον προοριζόμενο.
  • Το τυπικό GTIN (Γραμμωτός Κώδικας) αναγνωρίζει μόνο τον τύπο προϊόντος (π.χ. 'Αναψυκτικό 330ml'). Το SGTIN-96 προσθέτει έναν Σειριακό Αριθμό, δίνοντας σε κάθε κουτάκι μια μοναδική ταυτότητα. Αυτό επιτρέπει ιχνηλασιμότητα επιπέδου αντικειμένου, επιτρέποντάς σας να παρακολουθείτε ακριβώς ποιο συγκεκριμένο αντικείμενο πουλήθηκε, κλάπηκε ή έληξε.
  • Ναι. Όπως φαίνεται στον μετατροπέα παραπάνω, η συμβολοσειρά SGTIN-96 περιέχει το πλήρες GTIN-14. Αφαιρώντας τον Σειριακό Αριθμό και τις πληροφορίες επικεφαλίδας, μπορείτε να ανακατασκευάσετε τέλεια τον αρχικό γραμμωτό κώδικα λιανικής.
  • Η Επικεφαλίδα (0x30) είναι ένα τυπικό πρόθεμα 8-bit που ορίζεται από το GS1. Απλά λέει σε οποιονδήποτε αναγνώστη RFID: "Αυτή η ετικέτα είναι κωδικοποιημένη με το πρότυπο SGTIN-96." Άλλες επικεφαλίδες υπάρχουν για διαφορετικά πρότυπα (όπως SSCC για παλέτες ή GIAI για περιουσιακά στοιχεία).