Regex EAN-8 (GTIN-8)
An EAN-8, or GTIN-8, is the short barcode format for small packages: 8 digits where the first 7 identify the item and the last is a check digit computed with weights 3, 1, 3, 1, 3, 1, 3 (Wikipedia article 'International Article Number', example 7351353 followed by check digit 7). The validator.js and formvalidation attempts read, built for the whole EAN family, also accept 13 and 14 digits, and formvalidation 12: an EAN-13 or a UPC-A passes as an EAN-8. JsBarcode's code is equivalent to the recommended pattern. Here's a strictly 8-digit pattern, compared against those attempts. The check digit is not recomputed.
/^[0-9]{8}$/passes 22/22 cases
Comparison of existing patterns
| Source | pattern | Score on the 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 | safe |
| 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 | safe |
| 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 | safe |
Implementation
const re = new RegExp("^[0-9]{8}$", "");
re.test(input);Limits
- 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.