Regex EAN-8 (GTIN-8)
Un EAN-8, ou GTIN-8, est le format court des codes-barres pour les petits emballages : 8 chiffres dont les 7 premiers identifient l'article et le dernier est une clé de contrôle calculée avec les poids 3, 1, 3, 1, 3, 1, 3 (article Wikipédia « International Article Number », exemple 7351353 suivi de la clé 7). Les tentatives relues de validator.js et de formvalidation, conçues pour toute la famille EAN, acceptent aussi 13 et 14 chiffres, et formvalidation 12 : un EAN-13 ou un UPC-A passe pour un EAN-8. Le code de JsBarcode, lui, est équivalent au motif recommandé. Voici un motif strictement à 8 chiffres, comparé à ces tentatives. La clé n'est pas recalculée.
/^[0-9]{8}$/passe 22/22 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| validator.js (isEAN, validEanRegex) — conçue pour EAN-8, EAN-13 et EAN-14 : « 5901234123457 » (13 chiffres) et un code de 14 chiffres passent | ^(\d{8}|\d{13}|\d{14})$ | 20 / 22 | sûr |
| formvalidation (@form-validation/validator-ean 2.4.0) — ajoute les 12 chiffres de l'UPC-A : « 012345678905 », 13 et 14 chiffres passent | ^(\d{8}|\d{12}|\d{13}|\d{14})$ | 19 / 22 | sûr |
| JsBarcode (EAN8.js, valid()) — « ^[0-9]{8}$ » : accepte les mêmes chaînes que la recommandée ; la clé est contrôlée séparément par checksum() | ^[0-9]{8}$ | 22 / 22 | sûr |
Implémentation
const re = new RegExp("^[0-9]{8}$", "");
re.test(input);Limites
- Valide seulement la FORME : « 73513538 » a 8 chiffres mais une clé fausse et passe ce motif. La clé GS1 (poids 3/1) n'est pas recalculée par la regex.
- Un code de 8 chiffres n'est pas toujours un EAN-8 : une chaîne de 8 chiffres peut être un identifiant sans rapport (date, numéro interne). Le motif ne distingue pas un GTIN-8 attribué d'un code non attribué.
- Les codes plus longs sont refusés : EAN-13 (voir ean-13), GTIN-14 (voir gtin-14) et UPC-A (12 chiffres) ont leurs propres formes. Aucune tolérance pour espaces ou tirets : normalisez avant validation.
- Les exemples du corpus sont de la documentation de bibliothèques ou synthétiques ; ne les utilisez pas comme vrais codes produit.