Chapitre 7
Codes-barre ou barbare ?

Résumé : que se cache-t-il derrière les mystérieuses petites lignes blanches et noires imprimées sur les étiquettes des produits de consommation ? Comment les déchiffrer ? Le sytème de définition des codes-barres est né dans l’armée américaine qui cherchait un moyen efficace de gérer et répertorier son armement.

Mots-clés : codage, décodage.

Enoncé

L’exercice s’inspire d’un article paru dans la gazette mathématique et indiquant la façon dont sont construits les codes-barres et dont on les code. Le principe est le suivant : on considère dans cet exemple le système EAN-13 (European Article Numbering) standardisé au niveau européen en 1997. C’est un système à 13 chiffres. Les chiffres 1 et 2 indiquent le pays, (la Suisse :76, l’Angleterre : 50, la France : de 30 à 39) les chiffres 3, 4, 5, 6 et 7 indiquent le fabricant du pays. Cela signifie 99’999 entreprises différentes possibles. Les chiffres 8, 9, 10, 11 et 12 indiquent le produit du fabricant (99’999 produits possibles).

Le 13e est un chiffre de vérification. Il est calculé comme suit : si l’on numérote les 12 chiffres depuis la gauche, on ajoute tous les chiffres de rang impair, cela donne la variable a ; on additionne tous les chiffres de rang pair cela donne la variable b, puis on calcule a + 3b, on soustrait ce résultat du prochain plus grand multiple de 10 et cela donne le 13e chiffre.

A titre d’exemple : 450 g de haricots de chez Heinz s’écrira dans le système EAN-13 5000157004185. 5 et 0 indiquent le pays, l’Angleterre ; 00157 le fabricant Heinz ; 004185 le produit. Pour calculer a on considère les rangs impairs. Cela signifie 5 + 0 + 1 + 7 + 0 + 1 = 14. Pour la variable b on prend les rangs pairs, cela signifie 0 + 0 + 5 + 0 + 4 + 8 = 17. a + 3b = 65. Or, 70 est le plus grand multiple de 10 le plus proche de 65. 70 - 65 = 5, donc le 13e chiffre est la valeur 5.

titre

La façon dont on code à partir de ces chiffres est la suivante : on considère une clé. La clé est donnée par le premier chiffre. Ici, dans notre exemple, il s’agit du nombre 5. On considère alors la ligne correspondante (ici, 5) dans la table de décodage des codes-barres. On a dans la ligne correspondante la description du 13e chiffre1 . Ainsi le 13e chiffre de la ligne 5 nous indique la clé ABBAAB.

Les six chiffres suivants sont pris dans la table conformément à la clé. Dans l’exemple, les chiffres suivants seront pris dans les lignes des chiffres (000157) et dans les colonnes A, B, puis B, puis B, puis A, puis A, puis B. Chacune de ces entrées dans la table est sous la forme de sept bits. Il y aura donc 6 x 7 = 42 bits qui seront codés de cette façon-là. Ensuite, les six chiffres restant sont codés en prenant les entrées dans la colonne C et on obtient 42 bits supplémentaires. Afin de permettre de repérer les positions de début, de milieu et de fin, on ajoute la séquence 101 au début, 01010 au milieu, et 101 à la fin. On aura donc un total de 95 bits qui représentent le code.

On remarquera que chaque chiffre se compose de deux barres et deux espaces blancs de longueur variable. La lecture du code est alors relativement simple : le lecteur (scanner fixe ou mobile) envoie un rayon lumineux et mesure la quantité de lumière réfléchie en chaque point du code. Les parties noires, qui absorbent la lumière renvoient un signal faible, tandis que les parties blanches, qui réfléchissent beaucoup, envoient un signal fort. L’ordinateur central reconstitue alors le code chiffré (et vérifie la lecture, entre autre, grâce à la clé de contrôle).

Au niveau graphique, il s’agira tout simplement de considérer que, dans cette suite de 95 bits, les 0 correspondent à un espace vide et les 1 à une ligne ou bande noire.

On peut faire remarquer ici que les livres débutent par les codes 978 puis l’ISBN, puis le chiffre de test. Pour les journaux, ils débutent par 977, puis l’ISSN et enfin le chiffre de test.

titre

La table de codage est donnée ci-dessous.

|--------|----------|----------|----------|-----------|
|Chi-ffre-|Groupe-A--|Groupe-B--|Groupe--C-|-13e chiffre|
|   0    | 0001101  | 0100111  | 1110010  |AAAAAA     |
|   1    | 0011001  | 0110011  | 1100110  | AABABB    |
|   2    | 0010011  | 0011011  | 1101100  | AABBAB    |
|   3    | 0111101  | 0100001  | 1000010  | AABBBA    |
|   4    | 0100011  | 0011101  | 1011100  | ABAABB    |
|   5    | 0110001  | 0111001  | 1001110  | ABBAAB    |
|        |          |          |          |           |
|   6    | 0101111  | 0000101  | 1010000  | ABBBAA    |
|   7    | 0111011  | 0010001  | 1000100  | ABABAB    |
|   8    | 0110111  | 0001001  | 1001000  | ABABBA    |
|---9----|-0001011----0010111----1110100----ABBABA----|
|        |

Indications

Pour construire le code-barre, il faut demander à l’utilisateur de taper les douze premiers chiffres, puis de vérifier le treizième. Ensuite, il faut utiliser la table de codage pour convertir en 95 bits ces 13 chiffres. Pour la représentation graphique, il suffit de faire une boucle qui parcourt le code et d’indiquer une barre verticale pour les bits à 1. Afin d’être sûr que l’écran représente correctement les informations, il faudra ajuster la taille de l’écran entre 1 et 95, par exemple.

Solutions