GetCNPJ 1.0.0

dotnet add package GetCNPJ --version 1.0.0
                    
NuGet\Install-Package GetCNPJ -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="GetCNPJ" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="GetCNPJ" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="GetCNPJ" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add GetCNPJ --version 1.0.0
                    
#r "nuget: GetCNPJ, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package GetCNPJ@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=GetCNPJ&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=GetCNPJ&version=1.0.0
                    
Install as a Cake Tool

GetCNPJ

NuGet License: MIT

Biblioteca .NET para consulta de CNPJ em APIs públicas brasileiras, com suporte a múltiplos provedores e rate limiting integrado.

📋 Características

  • Multi-Target: Suporta .NET Framework 4.8, 4.8.1, .NET 8, .NET 9 e .NET Standard 2.0
  • 🔄 Chain of Responsibility: Tenta automaticamente outros provedores em caso de falha
  • ⏱️ Rate Limiting: Controle automático de 3 requisições por minuto por provedor
  • 🎯 Retorno Padronizado: Dados consistentes independente do provedor utilizado
  • 📋 Inscrição Estadual: Suporte completo a inscrições estaduais (via CNPJ.WS)
  • 🔌 Múltiplos Provedores:
  • 🛡️ Validação: Validação automática de dígitos verificadores do CNPJ
  • Async/Await: API totalmente assíncrona + métodos síncronos para compatibilidade
  • 🎨 Clean Code: Seguindo padrões SOLID e melhores práticas

📦 Instalação

dotnet add package GetCNPJ

Ou via NuGet Package Manager:

Install-Package GetCNPJ

🚀 Uso Básico

Consulta Simples

using GetCNPJ;
using System;

// Criar cliente
using var client = new CnpjClient();

// Consultar CNPJ (aceita formatado ou apenas números)
var result = await client.GetAsync("03.312.791/0001-83");

if (result.Success)
{
    var data = result.Data;

    Console.WriteLine($"Razão Social: {data.RazaoSocial}");
    Console.WriteLine($"Nome Fantasia: {data.NomeFantasia}");
    Console.WriteLine($"CNPJ: {data.Cnpj}");
    Console.WriteLine($"Situação: {data.Situacao}");
    Console.WriteLine($"Endereço: {data.Endereco.EnderecoCompleto}");
    Console.WriteLine($"Email: {data.Email}");
    Console.WriteLine($"Telefones: {string.Join(", ", data.Telefones)}");

    // Inscrições Estaduais (disponível quando usa CNPJ.WS)
    if (data.InscricoesEstaduais != null && data.InscricoesEstaduais.Any())
    {
        Console.WriteLine("Inscrições Estaduais:");
        foreach (var ie in data.InscricoesEstaduais)
        {
            Console.WriteLine($"  - {ie}"); // Formato: Inscrição (UF) - Status
        }
    }

    Console.WriteLine($"Provedor usado: {data.Provedor}");
}
else
{
    Console.WriteLine($"Erro: {result.ErrorMessage}");

    // Exibir erros de cada provedor
    foreach (var error in result.Errors)
    {
        Console.WriteLine($"- {error.ProviderName}: {error.ErrorMessage}");
    }
}

Consulta com Provedor Específico

using var client = new CnpjClient();

// Forçar uso de um provedor específico
var result = await client.GetFromProviderAsync("03312791000183", "BrasilAPI");

if (result.Success)
{
    Console.WriteLine($"Razão Social: {result.Data.RazaoSocial}");
}

Consulta Síncrona

Para aplicações que não usam async/await, você pode usar os métodos síncronos:

using var client = new CnpjClient();

// Método síncrono
var result = client.Get("03312791000183");

if (result.Success)
{
    Console.WriteLine($"Razão Social: {result.Data.RazaoSocial}");
    Console.WriteLine($"Nome Fantasia: {result.Data.NomeFantasia}");
}

// Provedor específico síncrono
var result2 = client.GetFromProvider("03312791000183", "ReceitaWS");

Nota: Os métodos síncronos bloqueiam a thread atual. Para aplicações modernas (ASP.NET Core, WPF, etc.), recomenda-se usar os métodos assíncronos.

Configuração Customizada

var options = new CnpjClientOptions
{
    MaxRequestsPerMinute = 5,           // Aumentar rate limit (use com cuidado!)
    Timeout = TimeSpan.FromSeconds(60), // Timeout customizado
    EnableReceitaWS = true,             // Habilitar/desabilitar provedores
    EnableBrasilAPI = true,
    EnableCNPJA = false                 // Desabilitar CNPJA, por exemplo
};

using var client = new CnpjClient(null, options);
var result = await client.GetAsync("03312791000183");

HttpClient Customizado

// Usar seu próprio HttpClient (recomendado em aplicações ASP.NET Core)
var httpClient = new HttpClient
{
    Timeout = TimeSpan.FromSeconds(30)
};

using var client = new CnpjClient(httpClient);
var result = await client.GetAsync("03312791000183");

📊 Modelo de Dados Retornado

public class CnpjData
{
    public string Cnpj { get; set; }                    // CNPJ formatado
    public string RazaoSocial { get; set; }             // Razão social
    public string NomeFantasia { get; set; }            // Nome fantasia
    public DateTime? DataAbertura { get; set; }         // Data de abertura
    public string Situacao { get; set; }                // Situação cadastral
    public DateTime? DataSituacao { get; set; }         // Data da situação
    public string Tipo { get; set; }                    // MATRIZ/FILIAL
    public string Porte { get; set; }                   // Porte da empresa
    public string NaturezaJuridica { get; set; }        // Natureza jurídica
    public decimal? CapitalSocial { get; set; }         // Capital social
    public Endereco Endereco { get; set; }              // Endereço completo
    public AtividadeEconomica AtividadePrincipal { get; set; }
    public List<AtividadeEconomica> AtividadesSecundarias { get; set; }
    public List<Socio> QuadroSocietario { get; set; }   // QSA
    public List<string> Telefones { get; set; }         // Telefones
    public string Email { get; set; }                   // Email
    public List<InscricaoEstadual> InscricoesEstaduais { get; set; }  // Inscrições estaduais (CNPJ.WS)
    public SimplesNacional Simples { get; set; }        // Info Simples Nacional
    public DateTime? UltimaAtualizacao { get; set; }    // Data da atualização
    public string Provedor { get; set; }                // Provedor usado
}

⚙️ Padrões de Projeto Utilizados

  • Strategy Pattern: Diferentes implementações de provedores de API
  • Chain of Responsibility: Tentativa automática em múltiplos provedores
  • Factory Pattern: Criação de instâncias dos provedores
  • Repository Pattern: Abstração da lógica de consulta
  • DTO Pattern: Padronização dos retornos
  • Rate Limiter Pattern: Controle de requisições usando Sliding Window

🔒 Rate Limiting

A biblioteca implementa rate limiting automático de 3 requisições por minuto por provedor, conforme solicitado. Cada provedor tem seu próprio contador independente.

O algoritmo utilizado é o Sliding Window, que garante distribuição uniforme das requisições ao longo do tempo.

🛠️ Arquitetura

GetCNPJ/
├── Models/              # DTOs padronizados
├── Interfaces/          # Contratos da biblioteca
├── Exceptions/          # Exceções customizadas
├── Enums/              # Enumerações
├── Providers/
│   ├── Base/           # Classe base para providers
│   ├── ReceitaWS/      # Provider ReceitaWS
│   ├── BrasilAPI/      # Provider BrasilAPI
│   └── CNPJA/          # Provider CNPJA
├── Services/           # Serviço principal (Chain of Responsibility)
├── RateLimiter/        # Implementação do Rate Limiter
└── CnpjClient.cs       # Cliente principal

🧪 Tratamento de Erros

A biblioteca trata erros de forma elegante:

  • CNPJ Inválido: Lança InvalidCnpjException
  • Provedor Indisponível: Tenta o próximo provedor automaticamente
  • Rate Limit Excedido: Aguarda automaticamente antes de fazer nova requisição
  • Timeout: Configurável via CnpjClientOptions
  • Todos Provedores Falharam: Retorna CnpjResult com Success = false e lista de erros

📝 Requisitos

  • .NET Framework 4.8+ ou
  • .NET 8+ ou
  • .NET Standard 2.0+

🤝 Contribuindo

Contribuições são bem-vindas! Sinta-se à vontade para:

  1. Fazer fork do projeto
  2. Criar uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abrir um Pull Request

📄 Licença

Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para detalhes.

🔗 APIs Utilizadas

  • CNPJ.WS - API padrão ⭐ Único provedor que retorna inscrição estadual
  • ReceitaWS - API gratuita de consulta de CNPJ
  • BrasilAPI - API pública brasileira
  • CNPJA - API aberta de CNPJ

Nota: Por padrão, a biblioteca usa o provedor CNPJ.WS como primeira opção (prioridade 1) pois é o único que fornece dados de inscrição estadual. Os demais provedores são utilizados como fallback em caso de falha.

⚠️ Avisos Importantes

  • Rate Limiting: Respeite os limites de requisição das APIs públicas (3 req/min por padrão)
  • Uso Responsável: Esta biblioteca é para uso educacional e em aplicações que respeitem os termos de uso das APIs
  • Dados Públicos: Os dados retornados são públicos e provenientes da Receita Federal do Brasil
  • Sem Garantias: Os provedores podem ter indisponibilidade ou mudanças sem aviso prévio

🎯 Roadmap

  • Adicionar cache de consultas
  • Suporte a mais provedores
  • Métricas e telemetria
  • Retry policy configurável
  • Suporte a consulta em lote
  • Logging integrado

📞 Suporte

Para reportar bugs ou solicitar features, abra uma issue no GitHub.


Desenvolvido com ❤️ seguindo as melhores práticas de Clean Code e SOLID

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 is compatible.  net481 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 699 10/26/2025