Regex EAN-13
An EAN-13 is thirteen digits whose last digit is a check digit computed with alternating 1/3 weights — the exact same algorithm as GTIN-14 and GLN (see related pages). A regex can check the shape; it cannot recompute that check digit. The pattern found almost everywhere online — thirteen digits, nothing more — therefore accepts "0000000000000" and a code with a wrong check digit, while rejecting exports that contain spaces or a hyphen. It's the simplest honestly available pattern; the real risk is believing it's enough.
/^[0-9]{13}$/passes 21/21 cases
Comparison of existing patterns
Implementation
const re = new RegExp("^[0-9]{13}$", "");
re.test(input);Limits
- Ne vérifie pas la clé de contrôle (pondération alternée 1/3, modulo 10) : un code syntaxiquement valide selon ce motif peut avoir une clé fausse, ou être treize zéros — aucun des deux ne correspond à un produit réel. Calculer et vérifier la clé demande du code, pas une regex (voir par exemple `calc_check_digit()` dans python-stdnum, lien ci-dessus).
- N'accepte que des chiffres consécutifs sans séparateur : les exports contenant des espaces ou un tiret (fréquents en logistique et en export tableur) doivent être normalisés avant validation — retirer espaces et tirets, comme le fait explicitement `compact()` dans python-stdnum.
- Un UPC-A (12 chiffres, marché nord-américain) n'est PAS un EAN-13 : il le devient en lui ajoutant un zéro non significatif en tête. Les deux formats se ressemblent assez pour que du code écrit pour l'un soit copié par erreur pour l'autre (voir le candidat 3 ci-dessus).
- É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 — un motif copié tel quel d'un langage à l'autre peut accepter des chiffres non arabes.