Rexact
Cheatsheet

Regex CNPJ brésilien (alphanumérique)

Depuis juillet 2026, la Receita Federal attribue des CNPJ alphanumériques à toutes les nouvelles inscriptions : les 12 premiers caractères peuvent être des lettres majuscules ou des chiffres, seule la clé finale reste numérique. Les anciens numéros ne changent pas. Une regex à chiffres seuls comme « ^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$ » rejette donc désormais le CNPJ officiel d'exemple 12.ABC.345/01DE-35. Parmi les tentatives réelles, une seule est déjà alphanumérique, et celle de django-localflavor accepte n'importe quel séparateur. Voici un motif aux deux formes, comparé à ces tentatives.

/^(?!0{2}\.?0{3}\.?0{3}\/?0{4}-?0{2}$)(?:[A-Z0-9]{2}\.[A-Z0-9]{3}\.[A-Z0-9]{3}\/[A-Z0-9]{4}-[0-9]{2}|[A-Z0-9]{12}[0-9]{2})$/
passe 20/20 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^(?!0{2}\\.?0{3}\\.?0{3}\\/?0{4}-?0{2}$)(?:[A-Z0-9]{2}\\.[A-Z0-9]{3}\\.[A-Z0-9]{3}\\/[A-Z0-9]{4}-[0-9]{2}|[A-Z0-9]{12}[0-9]{2})$", "");
re.test(input);

Limites

  • Valide seulement la FORME : ne calcule pas les deux chiffres de contrôle modulo 11. « 16.727.230/0001-98 » et « 12.ABC.345/01DE-36 » ont la bonne forme mais une clé fausse, et passent ce motif ; seul un calcul dans le code les rejette.
  • Accepte les majuscules et les chiffres sur les 12 premiers caractères, y compris I, O, U et Q, que la Receita autorise : les minuscules sont refusées. Normalisez en majuscules avant validation. Le motif exclut le seul numéro nul, 00.000.000/0000-00, qui passe pourtant le calcul de la clé.
  • Les dates (attribution alphanumérique à partir de juillet 2026, numéros existants inchangés) viennent de la page officielle de la Receita Federal : un système qui n'a pas migré vers cette forme rejettera les nouveaux CNPJ à tort.
  • Un CNPJ qui passe forme et clé n'est pas forcément attribué à une entreprise active : seule la Receita Federal le confirme.

Pages liées