Convertisseur de code RFID
Convertisseur RFID
Convertir entre RFID Hex (SGTIN-96) et GS1 Code-barres (GTIN) + Numéro de série.
EPC URIs
Logique du code et étapes
// 1. Binary Conversion
// 2. Extract Fields (Bit Slice)
// 3. Determine Partition Rule (Partition 5)
// 4. Extract Company, Item & Serial
Code développeur
Utilisez cette logique utilitaire dans votre projet. Sélectionnez un langage 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}Explication
SGTIN-96 est une chaîne binaire de 96 bits divisée en 6 parties :
001100000x30Préfixe standard (00110000) identifiant ce format comme SGTIN-96.
0113Type d'objet (ex. : 1 = Produit de détail). Voir le guide de référence ci-dessous.
1015La partition 5 signifie : le code entreprise occupe 24 bits, le code produit occupe 20 bits.
1000100001010111110000118935363Code d'entreprise unique attribué par GS1.
00010111011001011101095837Votre code produit spécifique.
000000000000000000000000000000000000011Identifiant unique pour chaque produit physique spécifique.
Comprendre SGTIN et GTIN
Visualiser la relation entre votre code-barres physique et le code produit électronique (EPC).

Logique d'encodage (Étape par étape)
- É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 ».
- Étape 2 : Sélectionner la valeur de partition basée sur le nombre de chiffres du préfixe entreprise à partir du tableau des valeurs de partition.
- Étape 3 : Convertir la valeur de filtre, la valeur de partition, le préfixe entreprise, la référence article et le numéro de série en valeur binaire.
- Étape 4 : Concaténer dans l'ordre les valeurs binaires de l'en-tête, du filtre, de la partition, du préfixe entreprise, de la référence article et du numéro de série pour former l'EPC binaire.
Guide de référence SGTIN-96
| Valeur | Description |
|---|---|
| 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 au point de vente L'unité de consommation standard vendue au point de vente. Exemple : Une bouteille de shampooing. |
| 2 | Colis complet pour transport Une unité d'expédition standard contenant plusieurs articles. Exemple : Un carton de 12 bouteilles de shampooing. Critique pour la logistique pour distinguer « une caisse » de « un article ». |
| 3 | Réservé Réservé pour une utilisation future. |
| 4 | Regroupement d'articles internes Un regroupement plus petit qu'une caisse complète, souvent pour l'affichage ou la manipulation en rayon. Exemple : Un lot de 3 sous film rétractable à l'intérieur de la caisse principale. |
| 5 | Réservé Réservé pour une utilisation future. |
| 6 | Unité de charge Une grande unité logistique, typiquement une palette contenant plusieurs caisses. |
| 7 | Composant dans une 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. |
| Valeur | Préfixe entreprise | Référence article |
|---|---|---|
| 0 | 40 Bits / 12 Chiffres | 4 Bits / 1 Chiffres |
| 1 | 37 Bits / 11 Chiffres | 7 Bits / 2 Chiffres |
| 2 | 34 Bits / 10 Chiffres | 10 Bits / 3 Chiffres |
| 3 | 30 Bits / 9 Chiffres | 14 Bits / 4 Chiffres |
| 4 | 27 Bits / 8 Chiffres | 17 Bits / 5 Chiffres |
| 5 | 24 Bits / 7 Chiffres | 20 Bits / 6 Chiffres |
| 6 | 20 Bits / 6 Chiffres | 24 Bits / 7 Chiffres |
FAQ SGTIN-96
- Elle indique au système le niveau d'emballage du tag. Si un système lit un tag « Caisse » (Filtre 2), il sait qu'il contient plusieurs articles. Cela évite le double comptage (ex. : compter une caisse comme une seule unité) et permet la vérification d'expédition valide.
- Caisse (Filtre 2) est l'unité d'expédition principale utilisée pour le transport. Emballage interne (Filtre 4) est une subdivision à l'intérieur de cette caisse, généralement pour une manipulation ou un affichage plus facile (comme un lot de 6 à l'intérieur d'une caisse de 24). Les systèmes logistiques suivent les caisses ; Les opérations en magasin peuvent gérer efficacement les emballages internes.
- Le décodage échouera ou produira le mauvais code-barres. La Partition détermine exactement où se termine le préfixe entreprise et où commence la référence article. Si ce « point de séparation » est incorrect, vous obtiendrez un code entreprise différent de celui prévu.
- Le GTIN standard (code-barres) identifie uniquement le type de produit (ex. : « Soda 33 cl »). SGTIN-96 ajoute un numéro de série, donnant à chaque canette une identité unique. Cela permet la traçabilité au niveau article, vous permettant de suivre exactement quel article spécifique a été vendu, volé ou périmé.
- Oui. Comme indiqué dans le convertisseur ci-dessus, la chaîne SGTIN-96 contient le GTIN-14 complet. En supprimant le numéro de série et les informations d'en-tête, vous pouvez parfaitement reconstruire le code-barres de vente au détail original.
- L'en-tête (0x30) est un préfixe standard de 8 bits défini par GS1. Il indique simplement à n'importe quel lecteur RFID : « Ce tag est encodé selon la norme SGTIN-96. » D'autres en-têtes existent pour différentes normes (comme SSCC pour les palettes ou GIAI pour les actifs).