<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Leandro Gazoli</title>
    <description>The latest articles on DEV Community by Leandro Gazoli (@leandrogazoli).</description>
    <link>https://dev.to/leandrogazoli</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1381910%2Fefaf5fdc-4e07-4a47-b09f-a4b237316b7b.jpeg</url>
      <title>DEV Community: Leandro Gazoli</title>
      <link>https://dev.to/leandrogazoli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leandrogazoli"/>
    <language>en</language>
    <item>
      <title>Adeus Regex de CNPJ: Valide o Novo Formato Alfanumérico no NestJS e TS ⚡</title>
      <dc:creator>Leandro Gazoli</dc:creator>
      <pubDate>Tue, 07 Apr 2026 14:36:25 +0000</pubDate>
      <link>https://dev.to/leandrogazoli/deus-regex-de-cnpj-valide-o-novo-formato-alfanumerico-no-nestjs-e-ts-1d0n</link>
      <guid>https://dev.to/leandrogazoli/deus-regex-de-cnpj-valide-o-novo-formato-alfanumerico-no-nestjs-e-ts-1d0n</guid>
      <description>&lt;h3&gt;
  
  
  A Mudança que ninguém avisou (ou quase ninguém)
&lt;/h3&gt;

&lt;p&gt;A Receita Federal e o SERPRO atualizaram o formato do CNPJ. Agora, além de números, teremos letras (alfanumérico). Se o seu sistema usa aquela Regex antiga de 2010, &lt;strong&gt;ele vai quebrar&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Para resolver isso de forma elegante e tipada, criei a &lt;a href="https://www.npmjs.com/package/cnpj-universal" rel="noopener noreferrer"&gt;cnpj-universal&lt;/a&gt;. Uma biblioteca ultra-leve (~2KB) que lida com a transição do formato legado para o novo sem dor de cabeça.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que ela faz?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Validação Dual:&lt;/strong&gt; Aceita o formato antigo (&lt;code&gt;11.222.333/0001-81&lt;/code&gt;) e o novo (&lt;code&gt;12.ABC.345/01DE-35&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;NestJS Ready:&lt;/strong&gt; Já vem com decorator &lt;code&gt;@IsCNPJ()&lt;/code&gt; para seus DTOs.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Zero Dependências:&lt;/strong&gt; Performance pura e sem inchar seu projeto.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Type-Safe:&lt;/strong&gt; Escrita para TypeScript 5.x. ou superior.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Como implementar no NestJS (class-validator)
&lt;/h3&gt;

&lt;p&gt;Esqueça as validações manuais no controller. Com a &lt;code&gt;cnpj-universal&lt;/code&gt;, você usa como um decorator nativo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;IsCNPJ&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cnpj-universal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;EmpresaDto&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;IsCNPJ&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CNPJ inválido (numérico ou alfanumérico)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="nx"&gt;cnpj&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Uso em Vanilla JS/TS
&lt;/h3&gt;

&lt;p&gt;Se você não usa NestJS, a classe utilitária resolve tudo:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CNPJ&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cnpj-universal&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;CNPJ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isValid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;12.ABC.345/01DE-35&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ✅ true&lt;/span&gt;
&lt;span class="nx"&gt;CNPJ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;formatar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;12ABC34501DE35&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// '12.ABC.345/01DE-35'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;A transição para o CNPJ alfanumérico é gradual, mas obrigatória. Não espere o erro chegar no seu log de produção.&lt;/p&gt;

&lt;p&gt;Explore o projeto, abra issues e contribua:&lt;br&gt;
📦 &lt;a href="https://www.npmjs.com/package/cnpj-universal" rel="noopener noreferrer"&gt;NPM: cnpj-universal&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://github.com/LeandroGazoli/cnpj-universal" rel="noopener noreferrer"&gt;GitHub: LeandroGazoli/cnpj-universal&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/LeandroGazoli" rel="noopener noreferrer"&gt;
        LeandroGazoli
      &lt;/a&gt; / &lt;a href="https://github.com/LeandroGazoli/cnpj-universal" rel="noopener noreferrer"&gt;
        cnpj-universal
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Validação de CNPJ numérico (legado) e alfanumérico (novo formato SERPRO) para NestJS e class-validator.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;CNPJ Universal ⚡&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/cnpj-universal" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c52f8e891ef2dfbd9febccd723a839f85a20606b959c6077badeabd690b97444/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f636e706a2d756e6976657273616c3f6c6f676f3d6e706d266c6f676f436f6c6f723d7768697465" alt="npm version"&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/package/cnpj-universal" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f219c16d94436485d3856c69db383c624cc99703d429985bb31fd22bc553ff9a/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f636e706a2d756e6976657273616c3f6c6f676f3d6e706d266c6f676f436f6c6f723d7768697465" alt="npm downloads"&gt;&lt;/a&gt;
&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://www.typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9ca4bd1c4695385093df2cbd5482a8093b4a0421d7971535686f43d596721a58/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352e782d626c75653f6c6f676f3d74797065736372697074266c6f676f436f6c6f723d7768697465" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a href="https://nestjs.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2858c4f61d13f186d859755325f42b94e8122ee4470ff9895602ff304bebfb35/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6573744a532d436f6d70617469626c652d6561323834353f6c6f676f3d6e6573746a73266c6f676f436f6c6f723d7768697465" alt="NestJS"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Validador Type-Safe para CNPJ Numérico (Legado) e Alfanumérico (Novo Formato SERPRO).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Compatível com &lt;strong&gt;NestJS&lt;/strong&gt;, &lt;strong&gt;class-validator&lt;/strong&gt; e &lt;strong&gt;TypeScript/JavaScript puro&lt;/strong&gt;, com suporte completo para ambos os formatos de CNPJ brasileiros.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📋 Índice&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-caracter%C3%ADsticas" rel="noopener noreferrer"&gt;Características&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-instala%C3%A7%C3%A3o" rel="noopener noreferrer"&gt;Instalação&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-casos-de-uso" rel="noopener noreferrer"&gt;Casos de Uso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-uso-b%C3%A1sico" rel="noopener noreferrer"&gt;Uso Básico&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#decorator-iscnpj-nestjsclass-validator" rel="noopener noreferrer"&gt;Decorator @IsCNPJ (NestJS/Class-Validator)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#classe-utilit%C3%A1ria-cnpj" rel="noopener noreferrer"&gt;Classe Utilitária CNPJ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-compatibilidade" rel="noopener noreferrer"&gt;Compatibilidade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-formatos-aceitos" rel="noopener noreferrer"&gt;Formatos Aceitos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-sobre-o-novo-cnpj-alfanum%C3%A9rico" rel="noopener noreferrer"&gt;Sobre o Novo CNPJ Alfanumérico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-tratamento-de-erros" rel="noopener noreferrer"&gt;Tratamento de Erros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-contribuindo" rel="noopener noreferrer"&gt;Contribuindo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-licen%C3%A7a" rel="noopener noreferrer"&gt;Licença&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Características&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;✅ &lt;strong&gt;Validação Dual&lt;/strong&gt;: Suporta CNPJ numérico (legado) e alfanumérico (novo formato SERPRO)&lt;br&gt;
✅ &lt;strong&gt;Sem Dependências Externas&lt;/strong&gt;: Apenas &lt;code&gt;class-validator&lt;/code&gt; como peer dependency&lt;br&gt;
✅ &lt;strong&gt;Type-Safe&lt;/strong&gt;: Totalmente tipado em TypeScript&lt;br&gt;
✅ &lt;strong&gt;NestJS Ready&lt;/strong&gt;: Funciona como decorator em DTOs&lt;br&gt;
✅ &lt;strong&gt;Flexível&lt;/strong&gt;: Com ou sem máscara (&lt;code&gt;XX.XXX.XXX/XXXX-XX&lt;/code&gt;)&lt;br&gt;
✅ &lt;strong&gt;Batch Operations&lt;/strong&gt;: Métodos utilitários para cálculo de dígitos verificadores&lt;br&gt;
✅ &lt;strong&gt;Leve&lt;/strong&gt;: ~2KB minificado&lt;br&gt;
✅ &lt;strong&gt;Zero Breaking Changes&lt;/strong&gt;: API estável desde v1.0.0&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Instalação&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install cnpj-universal&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Com yarn:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;yarn add cnpj-universal&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Com pnpm:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pnpm&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/LeandroGazoli/cnpj-universal" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>nestjs</category>
      <category>npm</category>
    </item>
    <item>
      <title>Validando CNPJ de forma definitiva: Conheça a cnpj-universal (JS/TS)</title>
      <dc:creator>Leandro Gazoli</dc:creator>
      <pubDate>Tue, 07 Apr 2026 14:25:35 +0000</pubDate>
      <link>https://dev.to/leandrogazoli/validando-cnpj-de-forma-definitiva-conheca-a-cnpj-universal-jsts-2l68</link>
      <guid>https://dev.to/leandrogazoli/validando-cnpj-de-forma-definitiva-conheca-a-cnpj-universal-jsts-2l68</guid>
      <description>&lt;p&gt;Se você trabalha com sistemas que consomem dados da Receita Federal, já sabe: o CNPJ mudou. O novo formato alfanumérico (ex: 12.ABC.345/0001-01) já é uma realidade e muitas bibliotecas de validação legadas simplesmente param de funcionar porque esperam apenas números.&lt;/p&gt;

&lt;p&gt;Recentemente publiquei a &lt;a href="https://www.npmjs.com/package/cnpj-universal" rel="noopener noreferrer"&gt;cnpj-universal&lt;/a&gt;, uma biblioteca criada para ser a solução definitiva para quem precisa validar, formatar e gerar CNPJs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Por que usar a &lt;code&gt;cnpj-universal&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;Diferente de implementações antigas, esta biblioteca foi construída pensando na transição. Ela valida tanto o &lt;strong&gt;formato clássico (numérico)&lt;/strong&gt; quanto o &lt;strong&gt;novo formato alfanumérico&lt;/strong&gt;, seguindo rigorosamente as notas técnicas da Receita Federal.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Híbrida:&lt;/strong&gt; Suporta os dois formatos simultaneamente.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Minimalista:&lt;/strong&gt; Zero dependências.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Type-safe:&lt;/strong&gt; Feita em TypeScript para evitar erros em tempo de desenvolvimento.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Performance:&lt;/strong&gt; Preparada para &lt;em&gt;tree shaking&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Como usar
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instalação:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;cnpj-universal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Exemplo Prático:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;validar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;formatar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gerar&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cnpj-universal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Validando um CNPJ&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;isValid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;validar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;12.345.678/0001-00&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true/false&lt;/span&gt;

&lt;span class="c1"&gt;// Formatando (adiciona pontos, barra e traço)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cnpjFormatado&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;formatar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;12345678000100&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "12.345.678/0001-00"&lt;/span&gt;

&lt;span class="c1"&gt;// Gerando um CNPJ válido para testes&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;novoCnpj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;gerar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Principais Funcionalidades
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Validação rigorosa:&lt;/strong&gt; Algoritmo de dígitos verificadores completo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Limpeza automática:&lt;/strong&gt; Aceita strings com ou sem pontuação.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suporte a ESM e CommonJS:&lt;/strong&gt; Funciona no seu projeto legado ou no mais moderno com Next.js/Vite.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Se você está cansado de copiar e colar funções de validação entre projetos, dê uma chance ao &lt;code&gt;cnpj-universal&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Acesse o repositório, deixe uma ⭐ e contribua: &lt;br&gt;
&lt;a href="https://www.npmjs.com/package/cnpj-universal" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/cnpj-universal&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/LeandroGazoli" rel="noopener noreferrer"&gt;
        LeandroGazoli
      &lt;/a&gt; / &lt;a href="https://github.com/LeandroGazoli/cnpj-universal" rel="noopener noreferrer"&gt;
        cnpj-universal
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Validação de CNPJ numérico (legado) e alfanumérico (novo formato SERPRO) para NestJS e class-validator.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;CNPJ Universal ⚡&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/cnpj-universal" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c52f8e891ef2dfbd9febccd723a839f85a20606b959c6077badeabd690b97444/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f636e706a2d756e6976657273616c3f6c6f676f3d6e706d266c6f676f436f6c6f723d7768697465" alt="npm version"&gt;&lt;/a&gt;
&lt;a href="https://www.npmjs.com/package/cnpj-universal" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f219c16d94436485d3856c69db383c624cc99703d429985bb31fd22bc553ff9a/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f646d2f636e706a2d756e6976657273616c3f6c6f676f3d6e706d266c6f676f436f6c6f723d7768697465" alt="npm downloads"&gt;&lt;/a&gt;
&lt;a href="https://opensource.org/licenses/MIT" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://www.typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9ca4bd1c4695385093df2cbd5482a8093b4a0421d7971535686f43d596721a58/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352e782d626c75653f6c6f676f3d74797065736372697074266c6f676f436f6c6f723d7768697465" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a href="https://nestjs.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2858c4f61d13f186d859755325f42b94e8122ee4470ff9895602ff304bebfb35/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6573744a532d436f6d70617469626c652d6561323834353f6c6f676f3d6e6573746a73266c6f676f436f6c6f723d7768697465" alt="NestJS"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Validador Type-Safe para CNPJ Numérico (Legado) e Alfanumérico (Novo Formato SERPRO).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Compatível com &lt;strong&gt;NestJS&lt;/strong&gt;, &lt;strong&gt;class-validator&lt;/strong&gt; e &lt;strong&gt;TypeScript/JavaScript puro&lt;/strong&gt;, com suporte completo para ambos os formatos de CNPJ brasileiros.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📋 Índice&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-caracter%C3%ADsticas" rel="noopener noreferrer"&gt;Características&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-instala%C3%A7%C3%A3o" rel="noopener noreferrer"&gt;Instalação&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-casos-de-uso" rel="noopener noreferrer"&gt;Casos de Uso&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-uso-b%C3%A1sico" rel="noopener noreferrer"&gt;Uso Básico&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#decorator-iscnpj-nestjsclass-validator" rel="noopener noreferrer"&gt;Decorator @IsCNPJ (NestJS/Class-Validator)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#classe-utilit%C3%A1ria-cnpj" rel="noopener noreferrer"&gt;Classe Utilitária CNPJ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-compatibilidade" rel="noopener noreferrer"&gt;Compatibilidade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-formatos-aceitos" rel="noopener noreferrer"&gt;Formatos Aceitos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-sobre-o-novo-cnpj-alfanum%C3%A9rico" rel="noopener noreferrer"&gt;Sobre o Novo CNPJ Alfanumérico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-tratamento-de-erros" rel="noopener noreferrer"&gt;Tratamento de Erros&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-contribuindo" rel="noopener noreferrer"&gt;Contribuindo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/LeandroGazoli/cnpj-universal#-licen%C3%A7a" rel="noopener noreferrer"&gt;Licença&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Características&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;✅ &lt;strong&gt;Validação Dual&lt;/strong&gt;: Suporta CNPJ numérico (legado) e alfanumérico (novo formato SERPRO)&lt;br&gt;
✅ &lt;strong&gt;Sem Dependências Externas&lt;/strong&gt;: Apenas &lt;code&gt;class-validator&lt;/code&gt; como peer dependency&lt;br&gt;
✅ &lt;strong&gt;Type-Safe&lt;/strong&gt;: Totalmente tipado em TypeScript&lt;br&gt;
✅ &lt;strong&gt;NestJS Ready&lt;/strong&gt;: Funciona como decorator em DTOs&lt;br&gt;
✅ &lt;strong&gt;Flexível&lt;/strong&gt;: Com ou sem máscara (&lt;code&gt;XX.XXX.XXX/XXXX-XX&lt;/code&gt;)&lt;br&gt;
✅ &lt;strong&gt;Batch Operations&lt;/strong&gt;: Métodos utilitários para cálculo de dígitos verificadores&lt;br&gt;
✅ &lt;strong&gt;Leve&lt;/strong&gt;: ~2KB minificado&lt;br&gt;
✅ &lt;strong&gt;Zero Breaking Changes&lt;/strong&gt;: API estável desde v1.0.0&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Instalação&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install cnpj-universal&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Com yarn:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;yarn add cnpj-universal&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Com pnpm:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pnpm&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/LeandroGazoli/cnpj-universal" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>javascript</category>
      <category>typescript</category>
      <category>nestjs</category>
      <category>npm</category>
    </item>
  </channel>
</rss>
