Rexact
Cheatsheet

Regex GLN (Global Location Number)

A GLN (GS1 Global Location Number) is thirteen digits whose last digit is a check digit computed with the same alternating 1/3 weighting as EAN-13 and GTIN-14 (see related pages) — and it has the exact same length: thirteen digits. The consequence is blunt: a regex cannot tell a GLN apart from an EAN-13, a GTIN-13, or any other thirteen-digit GS1 key; only context (which field, which system) or a GS1 registry lookup can. It's the cleanest illustration on this site of the core idea — a regex validates a SHAPE, never an identity. Unlike an EAN-13, which identifies a product, a GLN identifies a legal entity, a function, or a physical location: it's used as a trading-partner identifier in EDI and e-invoicing (Peppol, France's Chorus Pro, EDIFACT). Telling fact: python-stdnum, a well-maintained Python library with 200+ real-world identifier validators, ships an ean.py module but no gln.py — because a GLN has, structurally, nothing extra to validate beyond what an EAN-13 already needs. Can you verify a GLN actually exists? Not with a regex: you'd need to query the GS1 registry, which means being a GS1 member or using a service like Verified by GS1 — a regex, even a perfect one, says nothing about whether the number is real.

/^[0-9]{13}$/
passes 23/23 cases

Comparison of existing patterns

Implementation

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

Limits

  • Ne distingue jamais un GLN d'un EAN-13, d'un GTIN-13 ou de toute autre clé GS1 à treize chiffres : même longueur, même algorithme de clé de contrôle. Seuls le contexte (quel champ, quel système a produit la valeur) ou une consultation du registre GS1 permettent de trancher — voir le cas piège « 9780306406157 » ci-dessus, un EAN-13 de livre réel qui a la forme exacte d'un GLN.
  • Ne vérifie pas la clé de contrôle (pondération alternée 1/3, modulo 10) : un numéro syntaxiquement valide selon ce motif peut avoir une clé fausse, ou être treize zéros — aucun des deux ne correspond à un lieu ou une entité réellement enregistrés.
  • Confirmer qu'un GLN existe réellement ne se fait pas par une regex : il faut interroger le registre GS1 (ou un service comme Verified by GS1), ce qui suppose d'être membre GS1 — un accès dont ne dispose pas la majorité des personnes qui valident un formulaire d'EDI ou de facturation électronique.
  • N'accepte que des chiffres consécutifs sans séparateur : les exports contenant des espaces, un tiret, ou un préfixe de schéma (« 0088: » en Peppol) doivent être normalisés avant validation.
  • É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.

Related pages