Menu

Chiffres de contrôle EAN UPC pour les codes-barres expliqués

Les chiffres de contrôle EAN UPC sont le dernier chiffre d'un code-barres : une somme pondérée qui commence d'un côté différent selon la longueur du code, puis un complément au modulo.

Publié le

  • validation
  • code-barres
  • chiffre de contrôle

Chaque code-barres de vente au détail se termine par un chiffre qui ne fait pas du tout partie de l’identité de l’article. Il est arithmétique : une somme pondérée des chiffres qui le précèdent, réduite à un seul caractère et imprimée afin qu’un scanner, ou une personne lisant les chiffres imprimés sous les barres, puisse dire si le code a survécu intact.

EAN et UPC sont les deux familles que la plupart des gens rencontrent en premier, et ce sont des parents assez proches pour que la même routine gère souvent les deux. Les différences sont minimes, positionnelles et faciles à manquer, ce qui explique pourquoi cet article se concentre sur l’endroit où l’arithmétique commence plutôt que sur l’arithmétique elle-même.

D’où vient le dernier chiffre d’un code-barres ?

Le schéma est celui que l’on connaît. Chacun des chiffres précédents est multiplié par un poids, les produits sont additionnés, et le total est transformé en un unique caractère final. Pour les familles de codes-barres décrites ici, les poids alternent entre un et une valeur plus grande, et le chiffre final est obtenu en portant la somme jusqu’au multiple de dix suivant.

L’objectif est étroit et précis. Un code-barres est lu par une machine qui peut mal lire une barre, et le chiffre final est là pour rendre la plupart des mauvaises lectures évidentes avant que le mauvais produit ne soit facturé. C’est un dispositif de détection d’erreur pour un canal bruité, et non un certificat de quoi que ce soit.

Comme la somme ne couvre jamais que les chiffres du code lui-même, le chiffre final peut être recalculé à partir de n’importe quelle chaîne candidate. C’est ce qui rend le contrôle assez peu coûteux pour s’exécuter à chaque scan, et c’est aussi pourquoi un code qui passe ne prouve rien sur le produit qu’il désigne.

Les codes de cet article sont décrits plutôt qu’imprimés. Aucun code-barres de produit réel n’est reproduit, et un schéma décrit est une convention publique plutôt qu’une affirmation sur un article présent dans un rayon.

EAN-13 et UPC-A : deux longueurs courantes, des départs de poids différents

Les deux familles partagent leur arithmétique et diffèrent dans les détails qui l’entourent.

Propriété EAN-13 UPC-A
Longueur totale La plus longue des deux La plus courte des deux
Motif de pondération Alterné, en partant d’un côté Alterné, en partant de l’autre côté
Où on le rencontre Articles de détail à l’international Articles de détail en Amérique du Nord
Relation Le code le plus court peut être transporté dans le plus long avec un chiffre de tête ajouté Un sous-ensemble de la même famille arithmétique

C’est cette relation qui fait que les bibliothèques exposent souvent une seule fonction qui détermine d’abord la longueur puis choisit le départ des poids. Une routine qui suppose un seul motif de pondération quelle que soit la longueur calculera un chiffre de contrôle faux pour chaque code de l’autre taille — et elle le fera avec assurance, produisant une valeur qui n’échoue que lorsqu’elle rencontre de vraies données.

Les noms méritent d’être utilisés avec précision ici. EAN-13 et UPC-A sont des désignations normalisées de deux formats spécifiques, et appeler tout numéro de détail par l’un d’eux est une petite habitude qui mène à un vrai bogue la première fois qu’une routine doit accepter les deux.

L’idée de pondérer depuis la droite

Les poids alternent, et la question qui décide de la justesse est de savoir quelle position reçoit quel poids. Dans ces schémas, l’alternance est ancrée à l’extrémité droite, de sorte que le chiffre immédiatement avant le caractère de contrôle porte toujours le même poids et que le motif croît vers la gauche à partir de là.

Ancrer depuis la droite plutôt que depuis la gauche, voilà ce qui permet à une seule routine de fonctionner sur plusieurs longueurs. Si le motif était ancré à gauche, ajouter un chiffre inverserait la parité de chaque position et changerait entièrement la signification du code. Ancrer à droite signifie que le voisinage du caractère de contrôle est stable et que le chiffre supplémentaire à l’extrême gauche n’est qu’un terme de plus dans la somme.

C’est la source la plus fréquente d’erreurs de décalage d’un rang dans le code des codes-barres. C’est aussi peu coûteux à tester : générez un code valide, vérifiez-le avec la routine, puis étendez-le d’un chiffre de tête et vérifiez de nouveau. Une routine ancrée du mauvais côté divergera sur l’une des deux longueurs.

Ce qu’un préfixe de code-barres dit et ne dit pas

Les chiffres de tête d’un code de détail sont alloués à des organisations de numérotation, et l’attribution est publiée. Il est tentant de les lire comme une affirmation sur le lieu de fabrication d’un article, et cette lecture est fausse. L’attribution identifie l’organisation qui a enregistré le numéro, et une organisation enregistrée peut faire fabriquer des marchandises n’importe où dans le monde.

L’impression physique des étiquettes ajoute une seconde couche d’imprécision. Le même article peut porter un code imprimé dans un pays et être emballé dans un autre, et une entreprise peut détenir des enregistrements sous plusieurs attributions. Traiter le préfixe comme un marqueur d’origine de production produira des affirmations d’approvisionnement assurées et incorrectes.

Pour un développeur, c’est un avertissement contre la dérive du périmètre. Le code-barres peut vous dire si les chiffres sont cohérents entre eux, et il peut vous dire quelle organisation a enregistré le numéro si vous consultez l’attribution publiée. Tout ce qui va au-delà relève d’un autre système avec d’autres données.

Un contrôle réussi signifie-t-il que le code-barres sera scanné ?

Non, et les deux défaillances méritent d’être séparées. Le chiffre de contrôle protège contre des chiffres erronés ; il ne dit rien sur l’impression. Des barres maculées, tronquées, imprimées à un grossissement incorrect ou sur une surface courbe peuvent défaire un scanner même si les chiffres en dessous sont parfaitement cohérents.

Un code correct ne prouve pas non plus que l’article existe dans votre catalogue. Un code bien formé peut renvoyer à un article que vous n’avez jamais stocké, ou à un code qui n’a jamais été attribué du tout. L’appartenance à un catalogue et la cohérence arithmétique sont des propriétés indépendantes, ce qui explique pourquoi un processus de réception de marchandises a besoin d’une consultation de sa propre liste autant que d’une étape de validation.

Le cas inverse est tout aussi important. Une mauvaise lecture qu’un scanner corrige silencieusement, ou un code qui échoue au contrôle parce que l’étiquette a été endommagée, n’est pas une preuve de fraude. C’est une preuve concernant l’étiquette.

Pour les développeurs : scan en masse et localisation des erreurs

La validation de codes-barres arrive généralement en volume, ce qui transforme deux petites décisions de conception en décisions importantes.

  1. Déterminez la longueur à partir des seuls chiffres, puis sélectionnez le départ des poids à partir de la longueur. Ne comptez pas sur un appelant pour déclarer quelle famille il envoie.
  2. Rejetez les caractères interdits avant que la somme ne s’exécute, afin qu’une description collée ne devienne pas un échec de somme de contrôle mystérieux.
  3. En cas d’échec, dites si la longueur était fausse ou si le chiffre final ne correspondait pas ; ces deux messages envoient l’utilisateur vers des remèdes complètement différents.
  4. Lors de la vérification d’un fichier, indiquez la ligne et la valeur telles que reçues, afin qu’un opérateur d’entrepôt puisse trouver l’étiquette en question.

Chaque schéma de cet article appartient à la même famille fondée sur un modulo que les autres décrits dans l’aperçu des algorithmes de chiffre de contrôle, ce qui est utile lorsqu’une routine doit servir plusieurs types de codes. Les numéros de livres et de périodiques suivent le même principe avec leurs propres particularités, traitées dans chiffres de contrôle ISBN ISSN.

Étapes suivantes

Choisissez un code valide de chacune des deux longueurs et confirmez que votre routine accepte les deux, puis modifiez un seul chiffre dans chacun et confirmez qu’elle rejette les deux. Ensuite, vérifiez ce que fait votre système lorsque l’arithmétique passe mais que le code est absent de votre catalogue — l’outil de validation de numéros montre comment un validateur doit formuler un résultat qui ne porte que sur les chiffres.

Continuer la lecture

Articles sur Validateur de numéros de carte et d'identité