Rexact
Cheatsheet

Regex GTIN-14 (ITF-14)

Un GTIN-14 est quatorze chiffres : un chiffre indicateur (1 à 8 pour un niveau d'emballage, 9 pour un article à quantité variable — poids, longueur) suivi d'un GTIN-13/EAN-13 sans sa propre clé, le tout recalculé avec la même clé de contrôle GS1 (pondération alternée 1/3, modulo 10) que l'EAN-13 et le GLN (voir fiches liées). Un EAN-13 complété d'un zéro non significatif en tête devient un GTIN-14 dont la clé reste — par construction, un zéro en tête ne change aucune pondération — strictement identique à celle de l'EAN-13 d'origine ; ce n'est vrai que pour l'indicateur 0, tout autre chiffre indicateur oblige à recalculer la clé sur les treize chiffres. « GTIN » n'est d'ailleurs pas une longueur mais une famille (GTIN-8, -12, -13, -14) : un motif qui accepte toute la famille, ou qui confond 13 et 14 chiffres, valide silencieusement le mauvais format.

/^[0-9]{14}$/
passe 22/22 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^[0-9]{14}$", "");
re.test(input);

Limites

  • Ne vérifie pas la clé de contrôle GS1 (pondération alternée 1/3, modulo 10) : un code syntaxiquement valide selon ce motif peut avoir une clé fausse, ou être quatorze zéros — aucun des deux ne correspond à un article réel.
  • N'accepte que des chiffres consécutifs sans séparateur : les exports contenant des espaces ou des tirets (fréquents en logistique et en export tableur) doivent être normalisés avant validation.
  • La famille GTIN comprend plusieurs longueurs valides (GTIN-8, -12, -13, -14) ; ce motif n'en couvre qu'une. Un motif qui accepte la famille entière (voir candidat 2) ou qui confond 13 et 14 chiffres (voir candidat 3) valide silencieusement le mauvais format — si le besoin réel est « accepter n'importe quel GTIN », il faut un motif conscient de la famille, pas ce motif-ci répété par longueur.
  • Le chiffre indicateur en tête (1 chiffre) n'est vérifié que pour la longueur : ce motif accepte n'importe quelle valeur 0-9, y compris 0 combiné à un article à quantité variable, une combinaison que GS1 ne définit pas.
  • Écrit avec `[0-9]` et non `\d` : en Python et .NET, `\d` matche par défaut tous les chiffres décimaux Unicode (pas seulement 0-9), et son comportement dépend d'une option de compilation en Java.

Pages liées