Convertisseur de code RFID

Outil de conversion entre SGTIN-96 (Hex RFID) et Code-barres (GTIN) + Numéro de série. Compatible avec les lecteurs RFID standards comme Zebra, Chainway, Impinj, Nextwaves. Basé sur la norme de données de balises EPC GS1.

Convertisseur RFID

Logique du code et étape par étape

// 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] → "..."?

Code pour développeur

Utilisez cette logique utilitaire dans votre projet. Sélectionnez une langue ci-dessous.

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}

Expliquer

Comprendre SGTIN et GTIN

Visualisation de la relation entre votre code-barres physique et le code produit électronique (EPC).

Diagramme montrant la connexion entre le code-barres (GTIN) et l'URI SGTIN-96

SGTIN-96 est une chaîne binaire de 96 bits divisée en 6 parties :

HDR
FLT
PRT
COMPANY
ITEM
SERIAL (38)

Analyse détaillée (bit par bit)

En-tête (8 bits)Bits 0-8 (8)
00110000

Préfixe standard (00110000) identifiant ceci comme SGTIN-96.

Filtre (3 bits)Bits 8-11 (3)
...

Type d'objet (par exemple, 1 = Détail). Voir le guide de référence ci-dessous.

Partition (3 bits)Bits 11-14 (3)
...

Partition X signifie : Le code de l'entreprise prend Y bits, le code produit prend Z bits.

Préfixe de l'entrepriseBits 14-0 (0)
...

Code d'entreprise unique attribué par GS1.

Référence de l'articleBits 0-0 (0)
...

Votre code produit spécifique.

Numéro de série (38 bits)Bits 0-96 (38)
...

Identifiant unique pour chaque produit physique spécifique.

Logique d'encodage (étape par étape)

  1. Étape 1 : Déterminer la valeur d'en-tête binaire pour le schéma EPC. La valeur d'en-tête binaire pour SGTIN-96 est « 00110000 ».
  2. Étape 2 : Sélectionnez la valeur de partition en fonction du nombre de chiffres dans le préfixe de l'entreprise à partir du tableau des valeurs de partition.
  3. Étape 3 : Convertissez la valeur du filtre, la valeur de partition, le préfixe de l'entreprise, la référence de l'article et le numéro de série en valeur binaire.
  4. Étape 4 : Concaténez dans l'ordre les valeurs binaires de l'en-tête, du filtre, de la partition, du préfixe de l'entreprise, de la référence de l'article et du numéro de série pour former l'EPC binaire.

Guide de référence SGTIN-96

FFiltrer les valeurs (3 bits)

ValeurDescription
0
Tous les autres
Utilisé pour les articles qui ne correspondent pas aux autres catégories. Rarement utilisé dans la vente au détail en général.
1
Article commercial Point de vente (PDV)
L'unité de consommation standard vendue au point de vente. Exemple : Une seule bouteille de shampooing.
2
Caisse complète pour le transport
Une unité d'expédition standard contenant plusieurs articles. Exemple : Un carton de 12 bouteilles de shampooing. Essentiel pour la logistique afin de distinguer « une caisse » de « un article ».
3
Réservé
Réservé pour une utilisation future.
4
Groupement d'articles commerciaux en emballage intérieur
Un groupement plus petit qu'une caisse complète, souvent pour l'affichage en rayon ou la manutention. Exemple : Un pack de 3 emballé sous film rétractable à l'intérieur du carton principal.
5
Réservé
Réservé pour une utilisation future.
6
Charge unitaire
Une grande unité logistique, généralement une palette contenant plusieurs caisses.
7
Composant à l'intérieur de l'unité de consommation
Une pièce spécifique à l'intérieur d'une unité de consommation. Exemple : Le couvercle de la batterie à l'intérieur d'un jouet.

PTable de partition (3 bits)

Valeur
Préfixe de l'entreprise
(Bits / Chiffres)
Référence de l'article
(Bits / Chiffres)
040 / 124 / 1
137 / 117 / 2
234 / 1010 / 3
330 / 914 / 4
427 / 817 / 5
524 / 720 / 6
620 / 624 / 7

Foire aux questions SGTIN-96