Rexact
Cheatsheet

Regex NAS canadien

Un NAS, ce n'est pas juste « 9 chiffres » : le règlement DORS/2013-82 précise que les numéros commençant par « 9 » sont réservés aux résidents temporaires, et un chiffre de contrôle de Luhn valide l'ensemble. Une regex republiée sur regexpattern.com contient un bug classique de précédence de l'opérateur « | », qui rend en réalité les deux ancres de début et de fin indépendantes l'une de l'autre — un numéro entouré de texte parasite passe la validation. Voici un motif qui impose un séparateur cohérent (tiret ou espace, jamais mélangé), comparé à cette tentative buguée et deux autres.

/^(\d{3})([-\s]?)(\d{3})\2(\d{3})$/
passe 21/21 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^(\\d{3})([-\\s]?)(\\d{3})\\2(\\d{3})$", "");
re.test(input);

Limites

  • Valide seulement la FORME (9 chiffres, séparateur cohérent) : ne calcule pas la clé de contrôle de Luhn — un NAS syntaxiquement valide selon ce motif peut échouer ce calcul et ne correspondre à aucune personne réelle (voir 123-456-789 ou 046-454-287 dans les exemples, tous deux structurellement valides mais faux à la clé).
  • Le tableau associant le 1er chiffre à une province ou un territoire d'émission, largement repris en ligne, n'est pas confirmé par une page canada.ca actuelle trouvée lors de la rédaction de cette fiche — volontairement omis plutôt qu'affirmé sans source officielle solide. Seule la règle « 9 = résident temporaire » est doublement confirmée (règlement DORS/2013-82 et page canada.ca dédiée).
  • Ne consulte aucun registre d'Emploi et Développement social Canada : seule une vérification auprès de cet organisme confirme qu'un NAS est réellement attribué et actif.
  • N'autorise qu'un seul type de séparateur pour tout le numéro (uniquement des tirets, ou uniquement des espaces, jamais mélangés) : plusieurs bibliothèques réelles comparées ici acceptent à tort un mélange incohérent des deux.