Projet : Code Barre

Icône réalisée par Vectors Market à partir de www.flaticon.com. Illustration.

I - Intro

De nos jours, les codes barres sont utilisés dans de nombreux domaines, que ce soit dans l'achat de produits en magasin ou la création de QR Code, il existe de nombreuses variations des codes barres. Celles qui nous intéresseront dans ce blog seront les variations classiques des codes barres à une dimension, intitulés EAN (European Article Numbering). Il en existe 3 versions différentes :

- L'EAN 8 a 8 chiffres, utilisé pour l'achat de produit de petite taille
- L'EAN 13 a 13 chiffres, utilisé lors de l'achat d'autres produits
- L'EAN 128, utilisé pour transmettre des informations alphanumériques

Nous nous intéresseront dans ce billet uniquement au fonctionnement et à l'utilisation des codes barres EAN 8 et 13 car ce sont les plus communs et leurs fonctionnement sont similaires. De plus, nous commencerons par expliquer tout d'abords le fonctionnement du EAN 8 avant le EAN 13 étant donné qu'il s'agit à peu de chose près d'une version simplifié du EAN 13.

II - Description de l'encodage EAN

Le principe de base du fonctionnement d'un code barre est finalement assez simple. Nous allons commencer par les EAN 8 étant donnés qu'ils sont plus simples que les EAN 13.

Code barre EAN 8

Dans un code barre EAN, chaque chiffre du code barre est encodé sous forme d'une série de 7 bits, chaque bit étant représenté par une barre noire (bit qui vaut 1) ou bien une barre blanche (bit qui vaut 0). En outre, dans le code barre ci-dessus, le chiffre 6 est représenté par les 7 barres courtes qui suivent les barres longues. Ici, les bits représentant 6 sont alors "0101111".

Les barres longues sont appelées des zones de gardes, il en existe deux latérales (noire, blanche, noire) et une centrale (blanche, noire, blanche, noire, blanche). Elles servent à délimiter le code barre et à donner la distance entre deux barres.


Un code-barres EAN 8 représente un nombre de 8 chiffres, son codage est de 8 éléments (1 élément par chiffre).

Pour les EAN, toute série de barre représentant un chiffre est appelé "élément". Pour les EAN 8, il existe les éléments A et C :

Table d'encodage des chiffres pour les éléments A et C

Cette table est une suite de chiffres qui chacun représente le nombre de barres blanches ou noires, dont pour chaque chiffre, le suivant n'est pas de la même couleur. Par exemple, 0 pourrait représenter "000 11 0 1" (Élément A) ou "111 00 1 0"(Élément C).

Les éléments A et C sont représentés ensemble, car pour passer d'un élément A à C, il suffit d'inverser tous les bits, ce qui permet d'obtenir l'inverse.

Par exemple le chiffre 0 est [3211], donc il vaut [0001101] en élément A et [1110010] en élément C.

Les codes barres EAN sont composés en deux parties, chaque partie est comporte de la moitié des chiffres à encoder. Pour l'EAN 8 nous avons donc 4 chiffres par partie.


Le motif d'un code barre corresponds à une série précise d'élément à utiliser. Pour un EAN 8, nous n'avons qu'un seul motif qui est [AAAA|CCCC], cela signifie que les chiffres de la première partie sont convertis en éléments A, tandis que ceux de la deuxième partie sont convertis en éléments C.

Ainsi avec le motif et les gardes, le code-barres EAN 8 est composé comme ceci:

Codage du code-barres EAN 8

Prenons par exemple le nombre 84671952, en binaire nous avons:

Le nombre 84671952 en EAN 8 en représentation binaire.

Dans un EAN 13, l'ordre des éléments dans la première partie du code barre est donnée par le tout premier chiffre que l'on souhaite encoder. La deuxième partie elle, qui commence après la garde centrale, est toujours composée uniquement d'éléments C. En d'autres termes, cela signifie que dans le code barre après encodage, le premier chiffre de la suite de chiffres que l'on aura encodé ne sera pas donné par un élément, mais par le motif de la première partie du code barre.

Table de l'ordre des éléments en fonction du premier chiffre

Par exemple, le code barre 9-782940-199617 commence par 9, il est donc de la forme ABBABA-CCCCCC car sa première partie est dictée par la table donné ci-dessus et sa deuxième partie est obligatoirement composée d'éléments C.

Représentation poussée de l'exemple donné

Chaque élément, qu'il s'agisse d'un type A, B ou C, corresponds a une manière spécifique de représenter un nombre. Dans le cas des EAN 13, il n'existe pas seulement la table A et C comme pour les EAN 8. La table B, unique aux EAN 13 permet une nouvelle représentation pour plus de sécurité sur l'encodage.

Table d'encodage des chiffres pour un élément B

Une fois que l'on connait le motif des éléments que l'on doit utiliser pour encoder notre code barre (celui-ci étant donné par notre tout premier chiffre), il ne reste plus qu'à se référer aux tables d'encodages des éléments A,B et C pour former un code barre valide. Cependant, il reste une dernière vérification à effectuer.

En effet, dans un EAN 13, le tout dernier chiffre du code barre est réservé comme clé de contrôle. Elle sert à vérifier que la suite de chiffre du obtenu en scannant le code barre est bien celle qu'elle est supposé être et qu'il n'y a pas eu d'erreurs lors de la lecture.

Cette clé de contrôle se calcule simplement en plusieurs étapes en suivant l'algorithme suivant :

  • On calcule trois fois la somme des chiffres de rang pair en lisant de gauche à droite (2,4,8,10,12)
  • On calcule la somme des chiffres de rang impair en lisant de gauche à droite (1,3,5,7,9,11)
  • On calcule la somme de ces deux dernières sommes
  • On garde uniquement le chiffre des unités du nombre obtenu, appelé R
  • Clé = 10 - R.

Ainsi, on obtient le 13ème chiffre de notre code barre. Cela implique aussi qu'on ne peut décider que des 12 premiers chiffres d'un code barre, le 13ème étant automatiquement réservé pour la clé de contrôle.

III - Intérêt du codage sur 7 bits

Montrons que le nombre de combinaisons possibles pour les nombres à 4 chiffres dont la somme totale est 7 est de 20 possibilités.

Nous savons que la valeur minimale d'un chiffre est 1 (soit 1 barre élémentaire) et que la valeur maximale d'un chiffre est de 7 - 3 fois la valeur minimale, soit 4.

  • Donc toutes les combinaisons possibles à 4 chiffres ont chacun de leurs chiffres qui appartiennent à l'ensemble {1,2,3,4}. ( * )
  • La somme totale des chiffres doit être égale a 7. Donc la somme des chiffres ne peut pas être supérieure ou inférieure à 7 ni posséder plus ou moins de 4 chiffres. ( ** )

Nous pouvons décomposer les combinaisons possibles sans ordre donné de la façon suivante :
- Aucun chiffre identique
- Deux chiffres identiques
- Trois chiffres identiques
- Quatre chiffres identiques

  • Pour 4 chiffres identiques : soit x ce chiffre, on a x*4 = 7, x = 4/7 qui n'est pas un entier, on utilise ( * ) donc faux.
  • Pour 3 chiffres identiques : soit x ce chiffre et deter le chiffre restant à déterminer: x*3 + deter = 7
cas avec x = 1 : Nous avons 1*3 + deter = 7, donc deter = 4, donc les nombres composés de {1,1,1,4} sont corrects, notons-le ( a ).

cas avec x = 2 : Nous avons 1*2 + deter = 7, donc deter = 1, donc les nombres composés de {2,2,2,1} sont corrects, notons-le ( b ).

cas avec x = 3 : Comme x*3 + deter = 3*3 + deter = 9 + deter, on utilise ( ** ) donc faux, de même pour x=4.
  • Pour 2 chiffres identiques : soit x ce chiffre et deter1, deter2 les chiffres restant à déterminer: x*2 + deter1 + deter2 = 7:
cas avec x=1: alors nous avons 1*2 + deter1 + deter2 = 7,
    si deter1 = 1, il y a trois fois le chiffre 1 (cas deux chiffres identiques) donc faux.
    si deter1 = 2, alors 1*2 + 2 + deter2 = 7, deter2 = 3, donc les nombres composés de {1,1,2,3} sont corrects, notons-le ( c ).
    si deter1 = 3, c'est le cas de la réponse c, on remplace deter1 par deter2 et vice-versa
    si deter1 = 4, alors 1*2 + 4 + deter2 = 7, deter2 = 0, impossible, donc faux.

cas avec x=2: alors nous avons 2*2 + deter1 + deter2 = 7,
    si deter1 = 1, nous sommes dans le cas ( b ).
    si deter1 = 2, il y a trois fois le chiffre 2 (cas deux chiffres identiques) donc faux.
    si deter1 = 3, x*2 + 3 + deter2 = 7, donc deter2=0. Or ( * ) donc faux. De même pour deter1 = 4.

cas avec x=3: comme 3*2 + deter1 + deter2 = 7, deter1 + deter2 = 1, or ( ** ) donc devrait être ici deter1 + deter2>=2, contradiction, donc faux.

cas avec x=4: comme 4*2 + deter1 + deter2 = 8 + deter1 + deter2, or ( ** ) donc faux.
  • Pour aucun chiffres identiques : il n'y a qu'une possibilité : 1,2,3,4 où 1+2+3+4 ≠ 7, donc faux.

Nous avons donc : {1,1,1,4}, {2,2,2,1} et {1,1,2,3}.
Maintenant on calcule leurs permutations:

Pour {1,1,1,4}, il contient 3 chiffres identiques donc:

Rendered by QuickLaTeX.com

Donc 4 possibilités.
De même pour {2,2,2,1}, nous avons aussi 4 possibilités
Pour {1,1,2,3}, il contient deux chiffres identiques et deux autres qui ne le sont pas:

Rendered by QuickLaTeX.com

Donc 12 possibilités.

Donc les possibilités totales de nombre de 4 chiffres non nuls dont la somme fait 7 est de 4 + 4 + 12 = 20 possibilités.


Un des principaux avantages des codes barres comparés à un encodage numérique classique est leurs capacités à rester lisible même après avoir été partiellement endommagé. De plus, un scanner aura beaucoup plus de mal à reconnaître et afficher correctement un encodage numérique plutôt qu'un code barre, sans parler des avantages au niveau de la détection d'erreurs qu'apportent les codes barres EAN.

Ce qui permet aux codes barres d'être aussi facile à scanner, c'est le fait qu'un élément de A ou B commence toujours par une barre blanche et finisse par une barre noire, tandis qu'un élément C commencera toujours par une barre noire et finira par une barre blanche. Cette constante permet aux scanners de détecter si un code barre est a l'envers étant donné que les éléments C sont toujours en fin de code barre.

En outre, un code barre à très peu de chance d'être mal lu, en effet, cette mesure combinée avec la clé de contrôle permet d’être quasiment certain qu'une lecture est soit correcte, soit impossible.


En plus de cette capacité à détecter si un code barre est inversé ou non, les zones de gardes vues précédemment assurent encore plus de sûreté quant a la lecture effectuée. Elles agissent comme une double mesure permettant à la fois de vérifier l'emplacement des bornes gauche, droite et centrale en plus de permettre au scanner de savoir quelle est la distance exacte entre deux bits du code barre, et ce sur toute sa longueur.

Cette vérification permet permet de s'assurer a la lecture que le nombre de bit lu est correct et qu'il n'y a pas eu de débordement lors du scan dû à un endommagement du code barre. De plus, il est impossible de confondre les zones de gardes avec un élément du code barre car les zones de gardes latérales sont encodés en "101" et la zone centre en "01010". Aucun élément de A,B ou C ne produit un tel motif, ce qui permet de s'assurer au scan que la lecture d'un tel motif corresponds obligatoirement à une zone de garde.

IV - Détection et correction des erreurs

Les codes barres EAN sont d'ailleurs extrêmement robustes, si les codes barres EAN 8 ne possèdent que peu de sécurité dans a la détection des erreurs, les EAN 13, eux, sont pratiquement immunisés aux fausses lectures.

Dans un EAN 13, le fait que le premier chiffre soit encodé en utilisant le motif donné par les chiffres suivants et un réel avantage pour la détection des erreurs. En effet, si on scanne un code barre EAN 13 et que lors de la lecture, on aperçois que les éléments donnés par la première partie du code barres ne correspondent à aucun motif correct pour le premier chiffre, on sait d'office que notre code barre est faux.

En plus de cette sécurité, le fait que le dernier chiffre d'un EAN 13 soit une clé de contrôle ajoute une sécurité supplémentaire à notre encodage. De ce fait, il est presque impossible pour un mauvais scan d'un code barre EAN 13 de passer à la fois la vérification du premier chiffre via motif et la clé de contrôle sans révéler d'erreur.

Malheureusement, les codes barres à une dimension ne peuvent que détecter les erreurs sans les corriger. Les EAN 13 ne contiennent tout simplement pas assez d'information pour permettre la reconstitution d'un chiffre effacé ou d'un motif erroné. C'est un des principaux désavantages des codes barres à une dimension comparés aux codes barres a deux dimensions comme les QR codes.

V - Programme qui converti des chiffres en code-barres EAN (8 et 13)

Petit paragraphe sur notre programme (convertir)

Bibliographie

Références

Images, https://fr.wikipedia.org/wiki/Code-barres_EAN

https://fr.wikipedia.org/w/index.php?title=Code-barres_EAN&action=history ,Code-barres EAN, https://fr.wikipedia.org/wiki/Code-barres_EAN

Aurélien Jarno, Les codes barres, https://www.aurel32.net/elec/codes_barres.php

3 Cliquer pour recommander cet article