Como converter CEP para endereço

O CEP (Código de Endereçamento Postal) no Brasil foi criado com objetivo de organizar a postagem das correspondências de forma lógica. O sistema foi criado pela Empresa Brasileira de Correios e Telégrafos em 1971 e desde maio de 1992 contam com oito dígitos (formato 00000-000). Cada dígito corresponde à seguinte informação:

  • X0000-000: Região
  • 0X000-000: Sub-região
  • 00X00-000: Setor
  • 000X0-000: Subsetor
  • 0000X-000: Divisor de subsetor
  • 00000-XXX: Sufixo de distribuição

Os três algarismos após o hífen são denominados de sufixo e destinam-se à identificação individual de localidades de baixa demanda (CEP genérico, o “000”), logradouros (CEP comum, entre 001 e 899) ou lotes de grandes receptores (CEP especial, acima de 900).

Regiões postais (primeiro algarismo). Fonte: Correios
Regiões postais (primeiro algarismo). Fonte: Correios

Veja mais sobre a estrutura e relações entre regiões e códigos no site dos Correios. Nesse outro site, existe uma lista com as faixas de CEP para cada estado e região.

Busca de endereço pelo CEP

Através do site dos Correios é possível digitar um valor de CEP e obter as informações da rua, bairro e cidade/estado através desse link: Busca CEP – Endereço.

Mas e se precisar converter muitos CEPs em endereço? Nesse caso, veja essas duas rotinas (um shell script que chama um arquivo php) para automatizar o trabalho.

Conversão de CEP para endereço

O shell script a seguir lê um arquivo linha por linha, cada uma com um valor de CEP (com hífen), e executa o script em PHP que imprime as informações em um arquivo no formato CSV.

O script em PHP recebe o CEP como argumento e faz uma consulta ao site dos Correios para obter as informações do endereço, retornando uma tabela. A rotina também pega os campos da tabela, converte os caracteres HTML para UTF-8 e imprime em arquivo com quebra de linha para cada CEP consultado.

No código, ainda estão comentadas uma linha que serve para imprimir o array inteiro com o conteúdo da tabela e outras linhas (no final) para realizar substituições do texto de saída, inclusive para retirar acentos e caracteres especiais.

Obs.: Para o script acima funcionar no terminal Linux, você deve instalar o PHP (atualmente na versão 7) e o pacote CURL (“sudo apt-get install php php-curl”).

Faixas de CEP

Os Correios distribuíram faixas de CEP para todos os municípios e unidades federativas do Brasil. Por exemplo, a faixa de CEP do estado de São Paulo é “01000-000 a 19999-999”, ou seja, todos os CEPs dentro desse intervalo são de bairros e cidades dentro do estado de SP. Isso não significa que todos os valores nesse intervalo sejam válidos (por exemplo, o CEP 01029-901 retorna um endereço, mas o 01029904 não). Caso os Correios optem por criar mais CEPs para uma localidade com grande crescimento de atividade, os novos códigos deverão estar dentro da faixa reservada ao lugar. Existem três cidades com faixas bipartidas de CEP: São Paulo, Brasília e Nova Iguaçu.

A busca da faixa de CEP pode ser realizada através do site dos Correios, disponibilizada nesse link. Toda consulta exibe a faixa de CEPs do estado no topo e as da cidade consultada embaixo – a cidade sempre vai ter uma faixa “total do município”, mas também pode possuir intervalos específicos (dentro da faixa total) conforme o tamanho e distribuição de pessoas e atividades no lugar. Para consultar as faixas de todas as cidades de um estado, basta não preencher o campo de cidade, escolhendo apenas uma UF na lista.

Obtenção das faixas de CEP para cada município

O script em PHP utilizado acima pode ser adaptado para obter as faixas de CEP a partir de uma lista de cidades trabalhando em cima da URL e dos POSTFIELDS. Também é possível fazer um trabalho um pouco mais “braçal” realizando uma consulta para cada estado e copiando as tabelas em arquivos do tipo UF.txt, todos em uma mesma pasta. Então, rodar o seguinte shell script para organizar a informação em um só arquivo com uma coluna contendo os nomes das cidades e outra com as respectivas faixas de CEP:

Como o site dos Correios só dispõe de busca de cidade pelo nome, qualquer erro de digitação ou caractere especial que não esteja exatamente igual ao valor da base de dados do site pode inviabilizar uma busca. Para evitar esse tipo de problema, o script inclui uma conversão do nome por extenso da cidade para um padrão: . O nome da cidade nesse padrão será utilizado para comparar com uma outra tabela que contenha o nome da cidade nesse mesmo padrão e outras informações úteis (código IBGE, população, área, etc).

Para converter endereço em latitude e longitude, clique no link e veja os scripts, baseados na API do Google Maps.