Rexact
Cheatsheet

Regex NIF portugais (número de identificação fiscal)

Le NIF des personnes physiques est un numéro à 9 chiffres : les huit premiers sont séquentiels et le dernier est un chiffre de contrôle (décret-loi 14/2013, article 4, et note de l'Autoridade Tributária e Aduaneira). Le premier chiffre d'une personne physique va de 1 à 4, « 45 » désignant des non-résidents ; les NIF de personnes morales commencent par 5, 6, 7, 8 ou 9. La clé se calcule en pondérant les huit premiers chiffres 9, 8, 7, 6, 5, 4, 3, 2 : 11 moins le reste modulo 11, avec 10 et 11 ramenés à 0 (spécification DG TAXUD). Une regex ne l'exprime pas : elle vérifie 9 chiffres sans zéro initial, et il faut ajouter le contrôle de code. Les tentatives réelles relues divergent sur le zéro initial, le préfixe « PT » et les espaces entre groupes de 3 chiffres.

/^[1-9]\d{8}$/
passe 24/24 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^[1-9]\\d{8}$", "");
re.test(input);

Limites

  • Valide seulement la FORME : 9 chiffres, premier chiffre non nul. La clé modulo 11 n'est pas vérifiée : « 299999999 » et « 501964842 » passent. Complément : somme = Σ chiffre[i] × (9 − i) pour i de 0 à 7, clé = 11 − somme % 11, ramenée à 0 si elle vaut 10 ou 11.
  • Les préfixes valides ne sont pas bornés : la loi donne 1 à 4 pour les personnes physiques (« 45 » non-résidents) mais les préfixes 5 à 9 des personnes morales viennent de sources secondaires, donc un NIF commençant par 4 autre que 45, ou par 8, est accepté.
  • Le préfixe « PT » (forme TVA) et les espaces entre groupes sont rejetés : retirez-les avant de valider. Ne vérifie ni l'attribution ni l'existence du contribuable ; n'utilisez en test que des numéros d'exemple ou synthétiques.

Pages liées