Skip to content

Instantly share code, notes, and snippets.

@Guichaguri
Last active July 10, 2023 19:57
Show Gist options
  • Star 15 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save Guichaguri/e6b1c41b56e9b2787074fcc8e9602c6d to your computer and use it in GitHub Desktop.
Save Guichaguri/e6b1c41b56e9b2787074fcc8e9602c6d to your computer and use it in GitHub Desktop.
Consulta CNPJ e CEP - Javascript

Consulta de CNPJ e CEP em Javascript (Web ou NodeJS)

Funções para consultar informações sobre CNPJ e CEP pela web (sem backend necessário) ou através de Node.JS

  • nodejs-lib.js - Código para realizar a requisição através do módulo de HTTPS do Node.JS
  • web-lib.js - Código para realizar a requisição através de JSONP na Web
  • consulta.js - Funções para realizar consultas de CNPJ e CEP

Se você está usando Node.JS, adicione o código de nodejs-lib.js.

Se você está no navegador, adicione o código de web-lib.js.

Após isso, adicione também o código de consulta.js.

Tente evitar o uso de JSONP e use a versão de NodeJS sempre que possível.

Exemplo

Código

// O CNPJ pode ou não conter caracteres não númericos (como pontos, barra e traço)
consultaCNPJ('27.865.757/0001-02').then((json) => {
    console.log(json);
}, (erro) => {
    console.log('ERRO:', erro);
});

// O CEP pode ou não conter caracteres não númericos (como ponto e traço)
consultaCNPJ('22.460-901').then((json) => {
    console.log(json);
}, (erro) => {
    console.log('ERRO:', erro);
});

Respostas

CNPJ
{
  "atividade_principal": [
    {
      "text": "Atividades de televisão aberta",
      "code": "60.21-7-00"
    }
  ],
  "data_situacao": "03/11/2005",
  "nome": "GLOBO COMUNICACAO E PARTICIPACOES S/A",
  "uf": "RJ",
  "telefone": "(21) 2540-2623",
  "atividades_secundarias": [
    {
      "text": "Reprodução de vídeo em qualquer suporte",
      "code": "18.30-0-02"
    },
    {
      "text": "Portais, provedores de conteúdo e outros serviços de informação na internet",
      "code": "63.19-4-00"
    },
    {
      "text": "Agenciamento de espaços para publicidade, exceto em veículos de comunicação",
      "code": "73.12-2-00"
    },
    {
      "text": "Programadoras",
      "code": "60.22-5-01"
    }
  ],
  "qsa": [
    {
      "qual": "10-Diretor",
      "nome": "CARLOS HENRIQUE SCHRODER"
    },
    {
      "qual": "10-Diretor",
      "nome": "JORGE LUIZ DE BARROS NOBREGA"
    },
    {
      "qual": "10-Diretor",
      "nome": "ROSSANA FONTENELE BERTO"
    },
    {
      "qual": "10-Diretor",
      "nome": "ALI AHAMAD KAMEL ALI HARFOUCHE"
    },
    {
      "qual": "10-Diretor",
      "nome": "SERGIO LOURENCO MARQUES"
    },
    {
      "qual": "10-Diretor",
      "nome": "MARCELO LUIS MENDES SOARES DA SILVA"
    },
    {
      "qual": "10-Diretor",
      "nome": "ANTONIO CLAUDIO FERREIRA NETTO"
    },
    {
      "qual": "10-Diretor",
      "nome": "CRISTIANE DELECRODE LOPES SUT RIBEIRO"
    },
    {
      "qual": "10-Diretor",
      "nome": "MARCELO QUEIROZ DUARTE"
    },
    {
      "qual": "10-Diretor",
      "nome": "WANDERLEY BACCALA JUNIOR"
    },
    {
      "qual": "10-Diretor",
      "nome": "JOAO CARLOS FERRO FERRAZ DE MESQUITA"
    }
  ],
  "situacao": "ATIVA",
  "bairro": "JARDIM BOTANICO",
  "logradouro": "R LOPES QUINTAS",
  "numero": "303",
  "cep": "22.460-901",
  "municipio": "RIO DE JANEIRO",
  "abertura": "31/01/1986",
  "natureza_juridica": "205-4 - Sociedade Anônima Fechada",
  "fantasia": "GCP,TV GLOBO, REDE GLOBO, GLOBO.COM, SOM LIVRE",
  "cnpj": "27.865.757/0001-02",
  "ultima_atualizacao": "2018-06-09T11:45:30.538Z",
  "status": "OK",
  "tipo": "MATRIZ",
  "complemento": "",
  "email": "",
  "efr": "",
  "motivo_situacao": "",
  "situacao_especial": "",
  "data_situacao_especial": "",
  "capital_social": "6453568523.86",
  "extra": {}
}
CEP
{
  "cep": "22460-901",
  "logradouro": "Rua Lópes Quintas",
  "complemento": "303",
  "bairro": "Jardim Botânico",
  "localidade": "Rio de Janeiro",
  "uf": "RJ",
  "unidade": "",
  "ibge": "3304557",
  "gia": ""
}

Exemplos de erro

CNPJ inválido
CNPJ rejeitado pela Receita Federal
CEP inválido
CEP não encontrado
Tempo limite atingido
/**
* Consulta um CNPJ
*/
function consultaCNPJ(cnpj) {
// Limpa o CNPJ para conter somente numeros, removendo traços e pontos
cnpj = cnpj.replace(/\D/g, '');
// Consulta o CNPJ na ReceitaWS com 60 segundos de tempo limite
return jsonp('https://www.receitaws.com.br/v1/cnpj/' + encodeURI(cnpj), 60000)
.then((json) => {
if (json['status'] === 'ERROR') {
return Promise.reject(json['message']);
} else {
return Promise.resolve(json);
}
});
}
/**
* Consulta um CEP
*/
function consultaCEP(cep) {
// Limpa o CEP para conter somente numeros, removendo traços e pontos
cep = cep.replace(/\D/g, '');
// Como a API retorna 404 com CEPs com tamanhos inválidos
// Iremos validar antes para não ter que esperar o tempo limite do JSONP
if (cep.length !== 8) return Promise.reject('CEP inválido');
// Consulta o CEP na ViaCEP com 30 segundos de tempo limite
return jsonp('https://viacep.com.br/ws/' + encodeURI(cep) + '/json/', 30000)
.then((json) => {
if (json['erro'] === true) {
return Promise.reject('CEP não encontrado');
} else {
return Promise.resolve(json);
}
});
}
/**
* Implementação da requisição em NodeJS
*/
const https = require('https');
function jsonp(url, timeout) {
return new Promise(function(resolve, reject) {
// Cria uma solicitação HTTP
const req = https.get(url, (res) => {
// Se o status não for 2XX, retorna um erro
if (res.statusCode < 200 || res.statusCode >= 300) {
return reject(res.statusMessage);
}
let data = '';
res.on('data', chunk => { data += chunk; });
res.once('end', () => { resolve(JSON.parse(data)); });
});
req.once('error', e => { reject(e.message); });
req.setTimeout(timeout);
});
}
/**
* Implementação da requisição na web
*/
function jsonp(url, timeout) {
// Gera um nome aleatório para a função de callback
const func = 'jsonp_' + Math.random().toString(36).substr(2, 5);
return new Promise(function(resolve, reject) {
// Cria um script
let script = document.createElement('script');
// Cria um timer para controlar o tempo limite
let timer = setTimeout(() => {
reject('Tempo limite atingido');
document.body.removeChild(script);
}, timeout);
// Cria a função de callback
window[func] = (json) => {
clearTimeout(timer);
resolve(json);
document.body.removeChild(script);
delete window[func];
};
// Adiciona o script na página para inicializar a solicitação
script.src = url + '?callback=' + encodeURI(func);
document.body.appendChild(script);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment