Regex GTIN-14 (ITF-14)
A GTIN-14 is fourteen digits: an indicator digit (1 to 8 for a packaging level, 9 for a variable-measure item — weight, length) followed by a GTIN-13/EAN-13 without its own check digit, the whole thing recomputed with the same GS1 check digit (alternating 1/3 weights, modulo 10) as EAN-13 and GLN (see related pages). An EAN-13 padded with a leading non-significant zero becomes a GTIN-14 whose check digit stays - by construction, a leading zero changes no weighting - strictly identical to the original EAN-13's; that only holds for indicator digit 0, any other indicator digit forces a recomputation over all thirteen digits. "GTIN" isn't a length, it's a family (GTIN-8, -12, -13, -14): a pattern that accepts the whole family, or that confuses 13 and 14 digits, silently validates the wrong format.
/^[0-9]{14}$/Comparison of existing patterns
Implementation
const re = new RegExp("^[0-9]{14}$", "");
re.test(input);Limits
- 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.