Rexact
Cheatsheet

Regex Brazilian CNPJ (alphanumeric)

Since July 2026, the Receita Federal assigns alphanumeric CNPJs to all new registrations: the first 12 characters may be uppercase letters or digits, only the final check stays numeric. Existing numbers do not change. A digits-only regex such as '^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$' therefore now rejects the official sample CNPJ 12.ABC.345/01DE-35. Among real attempts, only one is already alphanumeric, and django-localflavor's accepts any separator. Here's a pattern covering both forms, compared against those attempts.

/^(?!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})$/
passes 20/20 cases

Comparison of existing patterns

Implementation

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);

Limits

  • 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.

Related pages