# Codes GS1

Les codes GS1 sont des codes normalisés par l'organisme international GS1.
Ces codes ont deux formes: les codes barres 1D ou les codes barres 2D. Ils sont présents sur de nombreux produits.
Le plus utilisé d'entre eux est EAN13, présent sur l'intégralité des produits vendus en grande distribution.
Dans l'industrie, le code GS1-128 est grandement utilisé pour la logistique, la gestion des stocks, et le transport. Il permet, entre autres, par la lecture du code barre, de limiter les saisies manuelles et de fiabiliser les données tout en améliorant la traçabilité des processus et des produits.
Avec la démocratisation des lecteurs compatibles avec les codes 2D, une migration vers des codes 2D est possible. GS1-Datamatrix ou GS1-QR Code pouvant remplacer avantageusement GS1-128, car ils utilisent la même codification des données. Cependant, un seul acteur de la chaîne logistique non équipé empêche une adoption généralisée. Le code GS1-Datamatrix est largement utilisé dans l'industrie pharmaceutique à la suite des recommandations éditées par GS1 pour ce secteur d'activité.

## Codes normalisés
### Codes barres classiques

Ces codes, généralement 1D, sont utilisés pour n'encoder qu'un nombre limité de données.

#### UPC-A / UPC-E

Ces codes UPC sont spécifiquement utilisés en Amérique du Nord.
Ils sont limités à 12 et 8 caractères numériques, la version à 8 caractères étant utilisée principalement sur les très petits produits.
Le dernier caractère est une clef de contrôle des 11 caractères précédents.

#### EAN13 / EAN8

Ces codes EAN13 / EAN8 sont utilisés dans le reste du monde.
Ils sont limités à 13 et 8 caractères numériques. La version à 8 caractères est utilisée essentiellement sur les très petits produits vendus à l'unité.
La donnée encodée est généralement un code article valide à l'international GTIN 13. Ou, pour l'EAN13 et dans le cas des articles à poids variables, un code article et son poids ou le prix du paquet. Ces codifications dépendent du marché local et sont à la discrétion des entités locales de GS1.
Dans un usage interne, certaines plages de codes sont délibérément laissées libres par GS1, comme par exemple la série commençant par 20 en France, entre autres. Leur codification et usage est alors libre, à l'exception du calcul de la clef, qui reste obligatoire. Ce code permet de coder sur 9 caractères 1 000 000 000 articles pièce ou poids fixe. Ces codes ne sont alors valides que dans un périmètre restreint. (par exemple : une entreprise, un groupement de magasins franchisé ou des entreprises partenaires)
Le dernier caractère est toujours une clef de contrôle calculée sur les 12 caractères précédents.

#### ITF14

Ce code utilise la symbologie ITF14 pour encoder un GTIN sur 14 caractères.
Ça peut être un GTIN 13 UVC avec un 0 pour l’amener à 14 caractères, ou un GTIN 14 colis sur un carton avec plusieurs produits.
Le dernier caractère est une clef de contrôle des 13 caractères précédents.

### Codes barres composites

Le code barre composite permet une gestion normalisée des expéditions/livraisons par les transporteurs, ainsi qu'une meilleure gestion des stocks dans les entreprises et les plateformes des grandes centrales d'achat de la grande distribution. (Voir Serial Shipping Container Code pour le détail du code barre)
Ces codes sont généralement encodés dans la codification GS1, utilisant un agencement Identifiant/valeur.
Le choix d'un type de code ou d'un autre est fait en fonction des données à encoder et de la place disponible sur les supports d'impression.

#### GS1-128 / EAN 128

Ce code utilise la symbologie Code 128 pour imprimer les données.
Il est le plus usité car un simple lecteur 1D permet de le décoder.
Il est amené à être remplacé par une des variantes 2D étant donné la généralisation des lecteurs compatibles 2D.
Le GS1-128 étant limité à 48 caractères, il n'est pas rare qu'il soit décomposé en plusieurs codes barres sur l'étiquette. (Cette limitation est imposée par GS1 et non par le Code 128, pour éviter les codes trop long qui seraient difficilement lisibles avec certains lecteurs codes barres) Dans le cas où il y aurait au moins deux codes barres GS1-128 sur l'étiquette, les couples Identifiant/Donnée encodés au format GS1 ne sont jamais séparés dans deux codes barres différents. La donnée suit immédiatement son identifiant dans un seul des codes barres se trouvant sur l'étiquette.

#### GS1-Datamatrix

Ce code utilise la symbologie 2D Datamatrix pour imprimer les données.
Il a l'avantage de ne pas se limiter à 46 caractères. Ce qui permet de ne mettre qu'un seul code barre sur un produit pour un grand nombre d'informations. De plus, la tolérance de lecteur par correction d'erreur permet de lire ces codes malgré certains défauts d'impression ou de manipulation.

#### GS1 DataBar

Ce code utilise les symbologies GS1 Databar pour imprimer les données.
C'est un code qui est un mix d'empilement de codes 1D et 2D.

#### GS1-QR Code

Ce code utilise la symbologie 2D QR Code pour imprimer les données.
Il offre globalement les mêmes avantages que la version Datamatrix.

#### QR Code et Datamatrix - GS1 Digital Link

Ce format est en fait un lien de type URI normalisé par GS1 sous appellation GS1 Digital Link. Il peut être encodé dans des codes Datamatrix. ou QR Code. À terme, il devrait être utilisé par les systèmes de caisse en substitution des codes EAN13/8 et UPC.
La normalisation du format GS1 Digital Link s'appuie fortement sur la codification GS1 habituelle et sur le format des URI/URL utilisé sur internet.

## Codification GS1

La codification GS1 est un standard international permettant l'échange de données entre producteurs et distributeurs.
Les codes GS1 sont composés d'un ou plusieurs identifiants (de taille fixe) appelés AI (Application Identifiers) dans la norme et de la donnée correspondante (de taille fixe ou variable suivant la normalisation de l'AI précédent la donnée).
Ils servent à identifier et tracer des produits dans une optique logistique. Entre autres : un marquage des unités logistiques (cartons contenant plusieurs articles), un suivi de produits expédiés en palettes ainsi que d'éventuelles dates de péremption des articles.
Principaux AI :
| Identifiant | Description | Longueur identifiant | Longueur donnée | Longueur totale |
| 00 | Identifie le numéro de palette ou colis suivie du code SSCC (numéro séquentiel de colis) | 2 | 18 | 20 |
| 01 | Identifie le contenu de la palette ou du carton par un GTIN 13 sur 14 (précédé du 0) ou un GTIN 14 ; le dernier caractère est toujours une clef EAN calculée sur les 13 caractères précédents. | 2 | 14 | 16 |
| 02 | Identifie le produit contenu dans la palette ou le carton comme l'identifiant 01, mais implique la présence de l'identifiant 37 pour indiquer combien de ces produits sont contenus dans la palette ou le carton. | 2 | 14 | 16 |
| 10 | Indique un numéro de lot. Le numéro de lot suivant cet identifiant est de taille variable (jusqu'à 20 caractères) | 2 | 1 à 20 | 3 à 22 |
| 11 | Indique une Date de fabrication. Suivie de cette date au format AAMMJJ (année sur deux caractères + mois sur deux caractères + jours sur deux caractères) | 2 | 6 | 8 |
| 15 | Indique une DDM (Date de Durabilité Minimale) suivie de cette date au format AAMMJJ (année sur deux caractères + mois sur deux caractères + jours sur deux caractères) | 2 | 6 | 8 |
| 17 | Indique une DLC (Date Limite de Consommation) suivie de cette date au format AAMMJJ (année sur deux caractères + mois sur deux caractères + jours sur deux caractères) | 2 | 6 | 8 |
| 21 | Numéro de série (non structuré) | 2 | 1 à 20 | 3 à 22 |
| 310X | Identifie le poids net de produit contenu dans la palette ou le colis. X indique le nombre de décimales à prendre en compte dans la donnée qui suit. Celle-ci est présentée sur 6 caractères y compris les X décimales (le point décimal ou la virgule ne doit pas figurer parmi les 6 caractères). Cet identifiant ne doit être présent que pour les articles à poids variable. Cela implique que, dans les AI 01 ou 02, l'ITF14 commence par un 9 et que la clef de ces AI soit recalculée en conséquence. | 4 | 6 | 10 |
| 37 | Identifie le nombre de produits contenus dans la palette ou le colis. Implique l'utilisation de l'identifiant 02 et l'absence de l'identifiant 01 | 2 | 1 à 8 | 3 à 10 |
| 90 | Accord bilatéral entre les partenaires commerciaux | 2 | 1 à 30 | 3 à 32 |
| 91 à 99 | Pour applications internes. Permet aux entreprises de s'appuyer sur la norme GS1 pour gérer des spécifications ou des codifications non prévues par la norme. | 2 | 1 à 30 | 3 à 32 |
La liste complète des AI possibles est disponible sur le site de GS1. Des ajouts sont faits en fonction de l'évolution des besoins. Par exemple, les AI 391X et 392X, représentant le montant du paquet, ont été ajoutés pour préparer l'arrivée de codes 2D sur les produits a poids variable en magasin en remplacement des codes barres EAN13.
Si les AI avec des données à taille variable sont suivis d'un autre identifiant (avec des données de taille fixe ou variable) et que la taille de la donnée n'est pas la taille maximum, il faut faire suivre la donnée variable du caractère de contrôle FNC1. Ce caractère permet d'indiquer la fin de la donnée. Dans le cas où la donnée est à sa taille maximale ou positionnée à la fin du code-barres, ce caractère ne doit pas être renseigné. C'est pour cette raison que, la plupart du temps, les zones variables sont positionnées à la fin des codes barres (par exemple le numéro de lot (10) ou les quantités (37)).
Pour des raisons de décodage des AI , il n'est pas possible de trouver deux AI commençant par les mêmes chiffres (par exemple (10) et (101)) puisque la lecture chiffre à chiffre du code-barres empêcherait de les décoder (cet exemple explique qu'aucun identifiant de 100 à 109 ne peut donc exister).
Un code GS1 est très souvent accompagné d'une représentation textuelle des données. Dans cette symbolisation, les AI sont entourés de parenthèses pour permettre une lecture visuelle simplifiée pour une personne ayant des connaissances minimales en code GS1. Ces parenthèses ne sont pas encodées dans le code.
Sous un code 1D (GS1-128) généralement les données sont présentées sur une seule ligne. Dans le cas d'un code 2D, une présentation par ligne de chaque donnée est parfois préférable.
Ainsi, dans l'agro-alimentaire, il n'est pas rare d'avoir des colis identifiés comme ceci :
    Note : Le caractère de contrôle FNC1 peut être remplacé par le caractère GS (code ASCII 29) avec certains lecteurs codes barres, ainsi que dans les données d'impression de certains langages d'imprimantes thermiques. Pour les lecteurs codes barres, il est souvent possible de modifier ce comportement et de remplacer le code FNC1 par une chaine de caractères « imprimable » de type « ]C1 » pour permettre une interprétation plus simple avec des lecteurs codes barres fonctionnant en émulation clavier. Ainsi, un lecteur renvoyant « 3712<GS>10123456 » ou « 3712[C110123456 » symbolise l'acquisition du code (37)12(10)123456. Pour les imprimantes utilisant, par exemple, le langage EPL2, l'utilisation du caractère ACK (Code ASCII 06) insère le caractère FNC1 dans le code GS1-128 ou Code 128.
Toutes les informations sur la codification GS1 sont disponibles auprès de GS1 ou d'autres organismes agréés.
Toutes les informations sur la gestion des codes GS1 par les différents matériels sont disponibles dans les manuels et ressources mis à disposition par leurs fabricants respectifs.

### GS1 Digital Link

GS1 Digital Link, se base sur la codification GS1 habituelle des couples AI/Valeur, sa présentation sous forme d'URI permettre des usages hors ligne et/ou en ligne de ces codes.
L'usage hors ligne est possible car les données sont encodées directement dans l'URI et ne nécessitent pas de connexion internet pour pouvoir les interpréter. Par exemple, un système de caisse ou d'inventaire pour un magasin.
L'usage en ligne, permet quant à lui l'utilisation de l'URI pour rediriger le client vers une ressource internet liée au produit.
Exemples de liens fournis dans la documentation GS1 :
Cette URI est composé de :
* Le domaine et chemin d'accès à la ressource 'https://id.exemple.com/' ou 'https://exemple.com/product/' dans les exemples.
* La clef principale d'identification produit et sa valeur avec généralement l'AI 01. Ex : /01/09506000134376/ (d'autres identifiant sont autorisé comme clef principale)
* Des clef secondaires facultatives. Dans nos exemples, /10/123ABC/ pour l'AI 10 (N° de lot) et /21/123456/ pour l'AI 21 (variante client).
* Des propriétés facultatives pour les données variables (date limite, poids, montant paquet...) dans données complémentaires de l'URI, après un ? et sépare par & présenté sous le format AI=Valeur, ainsi 17=241203 indique l'AI 17 (date limite de consommation) au 03/12/2024 et 3103=000520 indique l'AI 3103 (Poids net en gramme) pour 0.520 kg
GS1 recommande l'utilisation d'un sous-domaine court (id) réservé à l'identification produit pour raccourcir au maximum la longueur de l'URI, et de l'utiliser pour effectuer une redirection vers le site publique du produit. Car l'URI présente dans le code barre doit toujours être valide. L'utilisation de redirection permet de prendre en compte tout ou partie des AI présents dans l'URI afin de déterminer la page internet de destination. Par exemple, le produit et un N° de version ou N° de série, pour proposer des liens de support/téléchargements spécifiquement adapté au produit présent en rayon ou chez le consommateur.
Note : Les couples AI/Valeurs sont utilisés exactement comme dans la codification GS1 habituelle. La taille de la donnée doit être respectée. Par exemple, les AI 3100 a 3105 pour indiquer le poids net avec de 0 et 5 décimale sur 6 caractères. Alors qu'un AI 310 avec comme valeur 0.520 aurait résolu de façon naturelle la position de la décimale.