My Authors
Read all threads
Il va falloir clarifier deux trois trucs à propos des codes-barres, parce que c’est plus vaste que ça. (Ce que dit @SciencesMag n’est pas faux, mais c’est la partie émergée de l’iceberg, voir peut-être juste quelques flocons de neige à sa surface !)
Déjà, un code-barres c’est quoi et ça sert à quoi ?

Un code-barres c’est une façon de représenter des données. Soit des chiffres, soit des chiffres et des lettres. Ça a été inventé pour pouvoir automatiser l’enregistrement de produits.
Et c’est pas tout récent… Le brevet date de 1952 ! Et à l’époque, on avait pas le matériel nécessaire pour faire de la reconnaissance de caractères. Du coup, on a utilisé des barres et des espaces de taille variable pour n’avoir qu’une seule dimension à traiter.
Bref, un code-barres, c’est des barres et des espaces de différentes largeur. Du coup, on peut créer (et on a créé) des milliers de types de code-barres différents. Il suffit juste de définir un “symbole” (une suite de barres) pour chaque caractère.
Par exemple, ce que présente @SciencesMag c’est le “Code 39” (utilisé pour les médicaments en France). Sa syntaxe est assez simple mais limitée.

On peut représenter 10 chiffres, 26 lettres et 7 caractères spéciaux (mais le caractère * sert de délimiteur).
Chaque caractère est représenté sur 9 bits (0 ou 1) avec EXACTEMENT 3 bits à 1.
Par exemple, A s’écrit 100001001.
B s’écrit 001001001.
0 s’écrit 000110100, etc
Ensuite, on transforme cette série de bits par un enchaînement de barres et d’espaces, avec une barre (ou un espace) épais si on représente un 1 (les barres/espaces épais sont 2 à 3 fois plus larges que les “normaux”).
Enfin, un Code 39 commence et fini toujours par un astérisque “*”. Comme la représentation de ce caractère est asymétrique, il permet au lecteur de déterminer le sens dans lequel lire le code-barre.
Ça, c’était donc pour le code 39. Sauf qu’il est loin d’être optimal et ce n’est pas celui que vous croisez tous les jours dans votre supermarché…

On va parler de codes un peu plus complexes, les codes EAN (European Article Numbering)
Déjà, les codes EAN ne représentent que des chiffres. Il y a deux principales variantes, l’EAN 8 (8 chiffres) et l’EAN 13 (13 chiffres, plus courant).

Première différence, la façon dont on encode les caractères.
En fonction de sa place dans le code, chaque chiffre peut être représenté de 3 façons différentes qu’on appelle respectivement “élément A”, “élément B” et “élément C”.
Deuxième différence, la largeur des barres. Comme pour le Code 39, les largeurs des barres et des espaces sont mesurés relativement les uns par rapport aux autres (pour ne pas avoir à tenir compte de la distance entre le capteur et le code.
Sauf que dans les codes EAN, on peut avoir jusqu’à 4 largeurs différentes. On a la largeur “élémentaire” et des largeurs 2, 3 et 4 fois plus grandes (représentant respectivement 2, 3 et 4 barres ou espaces).
C’est une contrainte supplémentaire pour le lecteur puisqu’il doit déduire la largeur élémentaire à partir de ce qu’il capte.
Chaque élément du code barre (chaque chiffre représenté) est formé de deux espaces (barres claires) et de deux barres sombres dont la largeur totale est toujours égale à 7 largeurs élémentaires.
On a donc cette fois-ci nos caractères représentés sur 7 bits. Il faut également se rappeler qu’ils peuvent tous êtres représentés de 3 façons différentes.

Sur l’image, les “X” représentent des 1 et les “_” des 0.
Chaque code permet de savoir si on a à faire à un élément A, B ou C grâce à sa parité (est-ce que le nombre de 1 dans le code est pair ou impair), son premier et son dernier bit.
Parité impaire, commence par 0, fini par 1 → élément A
Parité paire, commence par 0, fini par 1 → élément B
Parité paire, commence par 1, fini par 0 → élément C
Parité impaire, commence par 1, fini par 0 → élément erroné.
Les codages B et C d’un même chiffre sont symétriques.

Le codage C d’un chiffre est le complément de son codage A (on remplace les 0 par des 1 et inversement).

Il y a toujours au moins un élément A dans chaque code (partie gauche pour EAN-8, 2ème élément pour EAN-13)
Ces spécificités permettent de lire un code-barres peu importe son orientation ou sa couleur (tant qu’un contraste suffisant existe entre les bandes claires et sombres).
Maintenant si vous prenez le code-barre d’un paquet de biscuit, vous allez remarquer deux trois choses dont je n’ai pas encore parlé.
Sur les côtés et au centre, il y a des barres plus longues que le reste.

Ce sont des “zones de garde”. Celles sur les côtés sont les zones de garde “normales” et celle au centre est la zone de garde… centrale.

Ok, c’est cool mais à quoi elles servent au juste ?
Comme je l’ai dit plus haut, les chiffres ont plusieurs représentations en fonction de leur place dans le code. Sauf qu’à cause de leur construction (certains commencent par un 1, d’autres finissent par un 1, etc) on risque d’avoir des problèmes s’ils sont côte à côte.
La zone de garde de début ne peut être suivie que par des éléments A ou B et la zone de garde de fin ne peut être précédée que par des éléments de type C. (et la zone de garde centrale permet de séparer les types A/B des types C).
Maintenant si vous êtes observateurs, vous avez repéré un petit problème avec notre paquet de biscuits… Pourquoi le code n’a que 12 chiffres et pourquoi il est précédé par un 7 ?
Et bien ce 7 est codé… Dans la partie gauche de notre code-barre.

Cette partie contient soit uniquement des éléments A, soit 3 éléments A et 3 éléments B (elle commence toujours par un A). En fonction de leur agencement, ils vont représenter un chiffre supplémentaire :
0 : [AAAAAA]
1 : [AABABB]
2 : [AABBAB]
3 : [AABBBA]
4 : [ABAABB]
5 : [ABBAAB]
6 : [ABBBAA]
7 : [ABABAB]
8 : [ABABBA]
9 : [ABBABA]
Pour notre paquet de biscuit, ça nous donne ABABAB, c’est à dire 7.
Enfin, le dernier chiffre du code est toujours un clé de contrôle qui permet de vérifier que le code barre est correct. Il est calculé à partir des valeurs des douze premiers chiffres :
On calcule 3 fois la somme des chiffres de rang pair c’est à dire le deuxième + le quatrième + le sixième + etc…

(Petite note, on est pas en programmation, donc le premier chiffre c’est le “premier”, par le “zéroième”)
- Ensuite, on calcule la somme des chiffres de rang impair.
- On additionne nos deux résultats.
- On prend le chiffre des unité de ce résultat (on l’appelle R).
La clé de contrôle est le reste de (10 - R) / 10
Dans notre cas, on a :
(6 + 2 + 1 + 4 + 9 + 8) * 3 = 90
7 + 2 + 2 + 0 + 6 + 3 = 20
90 + 20 = 110 → Unité = 0
Reste de (10 - 0) / 10 = 0
Autre chose à savoir, les 3 premiers chiffres permettent d’identifier le pays auquel est rattaché le fabriquant (pas forcément le pays de fabrication) ou le type de produit en question (les livres commencent par 978 ou 979. Dans notre cas, 762 correspond à la Suisse.
L’autorité désignée par les premiers chiffres délivre des numéros de fabricant que l’on retrouvera dans tous les produits créés par le-dit fabriquant. Par défaut, le code produit fait 5 chiffres (chaque fabricant peut donc vendre 99999 produits différents… en principe).
Y aurait beaucoup d’autres choses à dire tellement c’est vaste (on a même pas parlé des QR codes ou des codes barres couleur) mais ce thread est déjà bien assez long comme ça.
Je sais que c’est pas un sujet passionnant pour beaucoup d’entre vous mais j’ai toujours trouvé ça très intéressant de voir comment les encodages fonctionnent et ce qu’ils permettent de faire.
Missing some Tweet in this thread? You can try to force a refresh.

Enjoying this thread?

Keep Current with Erreur_418

Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!