Rexact
Cheatsheet

Regex Numéro PPS irlandais (Personal Public Service)

Un numéro PPS a 7 chiffres, une lettre de contrôle (A à W) et, facultativement, une seconde lettre. D'après la spécification DG TAXUD, la lettre de contrôle est dans [A-W] et la seconde lettre dans [A-I] ou « W ». La clé est un modulo 23 : les 7 chiffres sont pondérés 8 à 2 (le premier chiffre par 8) et la seconde lettre, si elle est présente, vaut 1 à 9 avec le poids 9 (« W » ou absence valant 0) ; le reste donne la lettre, 0 valant « W », 1 valant « A », jusqu'à 22 pour « V ». Une regex ne calcule pas ce modulo : elle borne la forme. Les trois tentatives réelles relues divergent sur la seconde lettre : l'une accepte tout caractère de mot, une autre ajoute des lettres historiques, la troisième ajoute des lettres historiques sans ancres de chaîne.

/^\d{7}[A-W][A-IW]?$/
passe 26/26 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^\\d{7}[A-W][A-IW]?$", "");
re.test(input);

Limites

  • Valide seulement la FORME : la lettre de contrôle modulo 23 n'est pas vérifiée. « 1234567A » (la bonne lettre est T) passe. Complément : s = Σ chiffre × (8 − i) pour les 7 chiffres + 9 × rang de la seconde lettre (A=1 … I=9, W ou aucune = 0) ; la lettre attendue est « W » si s % 23 = 0, sinon la lettre de rang s % 23.
  • La seconde lettre suit la spécification DG TAXUD ([A-I] ou W). Des lettres historiques « T » et « X » (numéros d'avant 2013, d'après python-stdnum) sont donc refusées : « 6433435FT » est rejeté ; remplacez le groupe par [A-IWTX] si vous devez les accepter. La casse est stricte (majuscules).
  • Ne dit rien de l'attribution du numéro (un PPS est une donnée personnelle) ; n'utilisez en test que les numéros d'exemple du document officiel ou synthétiques.

Pages liées