Buscando endereço através de CEP com PHP

Veja como é simples encontrar dados de um determinado endereço através do CEP.

Publicado em

É através do CEP que podemos encontrar dados relacionados a um endereço, assim podemos preencher os demais campos automaticamente sem que o usuário preencha manualmente. Antes de prosseguirmos, precisamos entender de fato o que é um CEP e porque ele existe.

“O Código de Endereçamento Postal é um conjunto numérico constituído de oito algarismos, cujo objetivo principal é orientar e acelerar o encaminhamento, o tratamento e a distribuição de objetos de correspondência, por meio da sua atribuição a localidades, logradouros, unidades dos Correios, serviços, órgãos públicos, empresas e edifícios.” (Acesso em 24/02/2018 https://www.correios.com.br/para-voce/precisa-de-ajuda/o-que-e-cep-e-por-que-usa-lo).

Normalmente para preencher os dados do formulário com base nos números do CEP informado, utilizamos o Javascript para fazer uma requisição via AJAX e retornar os dados, para posteriormente preencher os campos.

Existem diversos serviços que disponibilizam API para integração, aqui vamos usar o site viacep.com, porém é muito importante que o desenvolvedor fique atento e estes serviços, pois eles podem parar de funcionar, e se isso acontecer, a aplicação tem que continuar funcionando sem ter erros que comprometam os formulários.

Vamos há um exemplo de como obter os dados de um CEP e retornar em uma string JSON, posteriormente convertermos este JSON em um array.

Para retornar os dados, basta fazer uma chamada através de uma URL passando o CEP sem o ‘‘.

Exemplo de utilização: https://viacep.com.br/ws/123456000/json/

Para executar o código abaixo, é só acessara URL do script e passar uma query string com o CEP, da seguinte forma localhost/cep.php?cep=03009000.

Código 01:

$cep = filter_input(INPUT_GET, "cep");
 
 
if($cep){
    $cep = str_replace("-", "", $cep);
 
    $json = file_get_contents('https://viacep.com.br/ws/'. $cep . '/json/');
 
    $jsonToArray = json_decode($json);
    ?-->
    <p>CEP: <?=$jsonToArray->cep;?></p>
    <p>LOGRADOURO: <?=$jsonToArray->logradouro;?></p>
    <p>COMPLEMENTO: <?=$jsonToArray->complemento;?></p>
    <p>BAIRRO: <?=$jsonToArray->bairro;?></p>
    <p>LOCALIDADE: <?=$jsonToArray->localidade;?></p>
    <p>UF: <?=$jsonToArray->uf;?></p>
    <p>UNIDADE: <?=$jsonToArray->unidade;?></p>
    <p>IBGE: <?=$jsonToArray->ibge;?></p>
    <p>GIA: <?=$jsonToArray->gia;?></p>
     
    <?php
}

Agora vamos utilizar uma outra API para testes, essa API é interna do SatellaSoft é possui apenas 5 CEP cadastrado, ela deve ser utilizada apenas para testes, até porque não tem nenhuma utilidade com uma quantidade baixa de informações.

Exemplo de utilização: http://satellasoft.com/servicos/buscacep/?cep=123456000. Porém para utilizar o serviço de API de testes, é necessário que sua aplicação esteja rodando em um servidor WEB e não em servidor local.

Os CEPs disponíveis são:

CEP 01: 19050690 - Presidente Prudente

CEP 02: 01001000 - São Paulo

CEP 03: 69921126 - Acre

CEP 04: 13940000 - Águas e Lindóia/SP

CEP 05: 19640000 - Iepê/SP

Veja no algoritmo abaixo como fazer a requisição.

Código 02:

$cep = filter_input(INPUT_GET, "cep");
 
 
if($cep){
    $cep = str_replace("-", "", $cep);
 
    $json = file_get_contents('http://localhost/buscacep/?cep='. $cep);
 
    $jsonToArray = json_decode($json);
    ?-->
    <p>CEP: <?=$jsonToArray->cep;?></p>
    <p>LOGRADOURO: <?=$jsonToArray->logradouro;?></p>
    <p>COMPLEMENTO: <?=$jsonToArray->complemento;?></p>
    <p>BAIRRO: <?=$jsonToArray->bairro;?></p>
    <p>LOCALIDADE: <?=$jsonToArray->localidade;?></p>
    <p>UF: <?=$jsonToArray->uf;?></p>
    <p>UNIDADE: <?=$jsonToArray->unidade;?></p>
    <p>IBGE: <?=$jsonToArray->ibge;?></p>
    <p>GIA: <?=$jsonToArray->gia;?></p>
     
    <?php
}
 

Caso você não tenha um servidor WEB para testar, você pode criar a API de testes, basta criar um script com os códigos abaixo e fazer a chamada a partir dele, mas respeite as limitaçãos dos CEPs disponíveis, como se trata de uma API de testes, não use em ambiente de produção. A URL de testes, foi criada apenas para exemplificar esse artigo.

Código 03:

<?php
	header('Content-Type: application/json; charset=utf-8');
	
	$req = filter_input(INPUT_GET, "cep", FILTER_SANITIZE_NUMBER_INT);

	if($req){
		$req = str_replace("-", "", $req);
		$cepdata = array();
		switch($req){
			case '19050690':
				$cepdata = array(
					  "cep" => "19050-690",
					  "logradouro" => "Rua Democrata",
					  "complemento" => "",
					  "bairro"=> "Jardim Bongiovani",
					  "localidade" => "Presidente Prudente",
					  "uf" => "SP",
					  "unidade" => "",
					  "ibge" => "3541406",
					  "gia" => "5629"
				);			
			break;
			case '01001000':
				$cepdata = array(
						"cep" => "01001-000",
						"logradouro" => "Praça da Sé",
						"complemento" => "lado ímpar",
						"bairro" => "Sé",
						"localidade" => "São Paulo",
						"uf" => "SP",
						"unidade" => "",
						"ibge" => "3550308",
						"gia" => "1004"
				);			
			break;
			case '69921126':
				$cepdata = array(
					  "cep" => "69921-126",
					  "logradouro" =>  "Rua Angelim",
					  "complemento" =>  "",
					  "bairro" =>  "Loteamento Novo Horizonte",
					  "localidade" =>  "Rio Branco",
					  "uf" =>  "AC",
					  "unidade" =>  "",
					  "ibge" =>  "1200401",
					  "gia" =>  ""
				);
			break;
			case '13940000':
				$cepdata = array(
					  "cep"  =>  "13940-000",
					  "logradouro"  =>  "",
					  "complemento"  =>  "",
					  "bairro"  =>  "",
					  "localidade"  =>  "Águas de Lindóia",
					  "uf"  =>  "SP",
					  "unidade"  =>  "",
					  "ibge"  =>  "3500501",
					  "gia" => "1533"
				);
			break;
			
			case '19640000':
				$cepdata = array(
					  "cep"  =>  "19640-000",
					  "logradouro"  =>  "",
					  "complemento"  =>  "",
					  "bairro"  =>  "",
					  "localidade"  =>  "Iepê",
					  "uf"  =>  "SP",
					  "unidade"  =>  "",
					  "ibge"  =>  "3519907",
					  "gia" => "3475"
				);
			break;
		}
		
		echo json_encode($cepdata);
		
	}else{
		echo "invalid";
	}
?>

Por hora é apenas isso, eu vou ficando por aqui e nos vemos na próxima oportunidade.

Gunnar Correa
Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web, Especialista em Tecnologias na Educação e Pós-graduando em Segurança da Informação. Começou seus estudos na área de programação quando era criança, e atualmente, está estudando desenvolvimento de jogos. Fundador da SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.

Todos os nossos cursos em promoção
Todos os nossos cursos em promoção

Webstories

Todos os nossos cursos em promoção

Todos os nossos cursos em promoção

Deixe um comentário
Aguarde...
Todos os nossos cursos em promoção