Seções iMasters
.NET + E-commerce

Busca por CEP

Olá pessoal! Após um tempo afastado,
volto ao iMasters com um artigo que (tomara) será muito
valioso pra todos. Pois bem. Hoje irei mostrar uma aplicação
que desenvolvi para buscar CEP, utilizando a própria infra-estrutura
dos Correios.

Para entender melhor o que iremos abordar, primeiro acesse o exemplo on-line, em: http://www.walteram.com.br/artigos/cepbr/

Você verá a página à seguir.
Para experimentar, digite seu CEP ou endereço, e clique em “Procurar”.

Sabemos que, em certos projetos, como comércio
eletrônico, por exemplo, precisamos de uma forma segura
e confiável de descobrir o endereço do cliente.
Uma dessas formas é perguntar ao usuário o seu
CEP, e já deixar preenchido o seu endereço, bairro
e cidade. O usuário só precisará prencher
o número da casa onde mora. Neste caso específico,
isso irá ajudar a controlar o processo de envio da mercadoria,
pois a probabilidade de uma remessa ser devolvida diminui bastante.

A aplicação que desenvolví trata-se de uma DLL (apenas 32kb) com os objetos usados para fazer a busca. Resolví compilar todo o código em uma DLL pois é mais fácil de utilizar. Assim, você conseguirá fazer a busca em poucas linhas de código.

Tudo o que tem de fazer é criar uma pasta chamada “bin”, na raiz de seu site, e copiar a DLL para lá. Não precisa instalar nada no servidor. Apenas precisará do .Net Framework 2.0.

Então, pra começar, faça
o download
da DLL e dos exemplos
.

Copie a pasta bin para a raiz de seu  site.

Crie uma nova página em seu site, e digite o código abaixo. Lembre-se de salvar com a extensão .aspx. O código abaixo encontra-se disponível para download junto com a DLL.

<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)       
Try
            ‘Se preferir, rode on-line, em
‘http://www.walteram.com.br/artigos/cepbr/exemplo1.aspx

            Dim cep As New CEPBR.CEP("27330680")
            Response.Write(cep.CEP & "<br>")
Response.Write(cep.Estado & "<br>")
Response.Write(cep.Logradouro & "<br>")
Response.Write(cep.Bairro & "<br>")
Response.Write(cep.Cidade)
      Catch erro As ApplicationException
            Response.Write(erro.Message)
      End Try
    End Sub
</script>

O código acima procura o CEP, e mostra os dados encontrados (endereço, bairro, cidade e estado).

Quando você cria o objeto CEPBR.CEP e passa os parâmetros, a busca é feita por trás das cenas.
Caso o CEP não seja localizado, uma exceção é disparada. Através do bloco Try..Catch, podemos obter essa exceção, e tratá-la.

Você então pode usar as propriedades do objeto para exibir os dados encontrados.

Provavelmente agora você vai querer obter o inverso. Isto é, através de um endereço, mostrar o CEP.
Veja abaixo o código:

<%@ Page Language="VB" %>
<script runat="server">
      ‘
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)       
Try
            ‘Se preferir, rode on-line, em
‘http://www.walteram.com.br/artigos/cepbr/exemplo2.aspx

            Dim cep As New CEPBR.CEP("RJ", "Barra Mansa", _
  "Avenida", "Albo Chiesse", "Centro")
Response.Write(cep.CEP & "<br>")
Response.Write(cep.Estado & "<br>")
Response.Write(cep.Logradouro & "<br>")
Response.Write(cep.Bairro & "<br>")
Response.Write(cep.Cidade)
      Catch erro As ApplicationException
            Response.Write(erro.Message)
      End Try
    End Sub
</script>

Para este tipo de busca, precisamos passar os seguintes parâmetros:

Estado = RJ, SP, MG, etc
Cidade = São Paulo, Rio de Janeiro, etc
Tipo de logradouro = Rua, Avenida, Travessa, Praça, etc
Nome do Logradouro
Nome do Bairro

Entendeu?
O código é bem simples de implementar. Acredito que você não terá dificuldades em utilizá-lo. No entanto, preciso esclarecer algumas coisas:

. A busca é feita diretamente no Web Service
gratuito dos Correios. Isso é bom, pois a busca sempre
trará resultados atualizados. No entanto, isto também
significa que não há como garantir o funcionamento.
O site pode sair do ar, o Web Service pode acabar…

. Por isso,
use este recurso como adição, e não como única alternativa. Evite depender da busca.

. Sempre
trate as exceções.

. A performance
da busca também depende do Web Service.

E por hoje é só pessoal.

Espero que o artigo ajude a todos vocês. E, caso tenham alguma dúvida, não hesitem em escrever para mim.

Clique aqui para
fazer o download dos arquivos. Um forte abraço a todos!
Espero vocês no InterCon!

Mensagem do anunciante:

Sua loja virtual por quem entende de Magento. Solution Partner

Comente também

39 Comentários

Carlos Antônio Campos

Olá Walter,
gostei da sua matéria, bem legal, bem interessante, porém creio não só eu como outros desenvolvedores gostariam de ver como é feita a consulta nessa DLL.
Você alguma função para ler o HTML da página dos correios?
Se SIM, isso não poderia ser questionado por eles?
Se NÃO, então como foi feito?

Abraços

Walter Amorim

Eu utilizei o Web Service para busca de CEP dos Correios, que é http://consultacep.correios.com.br/office2003/Query.asmx
Assim, não estamos fazendo raspagem de HTML, o que seria incorreto.

Daniel Machado

tá dando erro ao tentar abrir o arquivo ZIP. Será um problema aqui ou o arquivo está mesmo corrompido?

Abraços

Walter Amorim

Daniel, várias outras pessoas baixaram e conseguiram abrir. Tente baixar de novo. Se não der certo, mande-me um e-mail, que eu te envio os arquivos.

Marcelo Leuck

Fiz o donwload da DLL e dos exemplos, compilei o projeto e executei… mas qual foi minha surpresa… nenhum CEP foi encontrado e nenhum endereço. Onde foi q eu errei?

Marcelo Leuck

Ao compilar o projeto dá esse erro: Type ‘CEPBR.CEP’ is not defined. Sendo q apenas baixei o exemplo e compilei.

Marcelo Leuck

Ao compilar o projeto dá esse erro: Type ‘CEPBR.CEP’ is not defined. Sendo q apenas baixei o exemplo e compilei.

Marcelo Leuck

Ao compilar o projeto dá esse erro: Type ‘CEPBR.CEP’ is not defined. Sendo q apenas baixei o exemplo e compilei.

Gustavo Gatto

Achei muito interessante a busca de ceps, porém gostaria de ver o conteúdo da DLL para que eu possa fazê-lo em java. Você poderia publicar os arquivos?

Gustavo Gatto

Achei muito interessante a busca de ceps, porém gostaria de ver o conteúdo da DLL para que eu possa fazê-lo em java. Você poderia publicar os arquivos?

Walter Amorim

Calma Marcelo, verifique se voce copiou a dll para a raiz do site. Você precisara do .Net Framework 2.0 para rodar. Qualquer coisa me mande um e-mail que eu te ajudo.

Walter Amorim

Calma Marcelo, verifique se voce copiou a dll para a raiz do site. Você precisara do .Net Framework 2.0 para rodar. Qualquer coisa me mande um e-mail que eu te ajudo.

Walter Amorim

Gustavo, me mande um e-mail que eu te ajuda a fazer essa implementação. Abraço.

Marcelo Leuck

Walter Amorim
Vc pode me enviar o arquivo web.config do seu exemplo? Fiz o download, compilei e executei… dá erro. Não existe o web.config no seu download, gerei um mas….

Walter Amorim

Marcelo, não tenho seu e-mail. Mande para nao.faca.spam@walteram.com.br. Não precisa de Web.Config, mas se quiser eu monto um pra vc. Me manda seu e-mail.

André Baltieri

CEPBR is Not Defined é a mensagem. tem que registrar a DLL no Web.config??
Abraços

André Baltieri

CEPBR is Not Defined é a mensagem. tem que registrar a DLL no Web.config??
Abraços

Alfred Reinold Baudisch

Olá! Parabéns pelo artigo, consegui fazer ele funcionar em meu servidor ASP.NET 2.0. Acontece que possuo uma loja em PHP e gostaria de implementar isso em PHP. Fiquei quase 5 horas tentando fazer o código funcionar, mas não encontrei a XML correta que devo enviar via a função Query. Eu consegui fazer a Request funcionar, mas a Query que é principal não. Teria como você disponibilizar o código fonte da DLL? Obrigado.

Alfred Reinold Baudisch

Olá! Parabéns pelo artigo, consegui fazer ele funcionar em meu servidor ASP.NET 2.0. Acontece que possuo uma loja em PHP e gostaria de implementar isso em PHP. Fiquei quase 5 horas tentando fazer o código funcionar, mas não encontrei a XML correta que devo enviar via a função Query. Eu consegui fazer a Request funcionar, mas a Query que é principal não. Teria como você disponibilizar o código fonte da DLL? Obrigado.

André Baltieri

Como faço pra tratar o erro quando o CEP não existe. Estou usando AJAX com sua DLL, então cada vez que o usuário digita uma tecla ele verifica se o cep existe, mas e quando não existe, gera um erro na página, como trato o erro de “CEP não Encontrado”. Parabéns pela matéria.
Abraços.
Meu e-mail é andrebaltieri@hotmail.com
Se puder me mandar algo seria muito grato.
Abraços

André Baltieri

Como faço pra tratar o erro quando o CEP não existe. Estou usando AJAX com sua DLL, então cada vez que o usuário digita uma tecla ele verifica se o cep existe, mas e quando não existe, gera um erro na página, como trato o erro de “CEP não Encontrado”. Parabéns pela matéria.
Abraços.
Meu e-mail é andrebaltieri@hotmail.com
Se puder me mandar algo seria muito grato.
Abraços

Walter Amorim

André, quando o CEP não é encontrado é gerada uma Exception. Você precisa colocar o seu código em um bloco Try/Catch. No primeiro exemplo desse artigo vc verá como fazer isso. Me mande um e-mail se tiver dúvidas.

Walter Amorim

Peço à quem quiser o código fonte da DLL, que me mande um e-mail, que eu mando o código e mostro como compilar.

leonardo costa

no meu teste , ele não dá erro, mas sempre dá como resultado o CEP nao encontrado, indo direto para o bloco CATCH. Você tem algum exemplo em C#?. Obrigado

leonardo costa

no meu teste , ele não dá erro, mas sempre dá como resultado o CEP nao encontrado, indo direto para o bloco CATCH. Você tem algum exemplo em C#?. Obrigado

leonardo costa

no meu teste , ele não dá erro, mas sempre dá como resultado o CEP nao encontrado, indo direto para o bloco CATCH. Você tem algum exemplo em C#?. Obrigado

leonardo costa

no meu teste , ele não dá erro, mas sempre dá como resultado o CEP nao encontrado, indo direto para o bloco CATCH. Você tem algum exemplo em C#?. Obrigado

leonardo costa

no meu teste , ele não dá erro, mas sempre dá como resultado o CEP nao encontrado, indo direto para o bloco CATCH. Você tem algum exemplo em C#?. Obrigado

Walter Amorim

Leonardo. Conforme te falei por e-mail, não tenho o código em C#. Provavelmente tem algum erro no código fonte de sua classe.

Thiago Fialho

Já esta no ar a mais de um ano, veja o exemplo aqui de como usar aqui.

http://thespoke.net/blogs/thiagocf/archive/2005/08/31/353202.aspx

Thiago Fialho

Já esta no ar a mais de um ano, veja o exemplo aqui de como usar aqui.

http://thespoke.net/blogs/thiagocf/archive/2005/08/31/353202.aspx

Thiago Fialho

Já esta no ar a mais de um ano, veja o exemplo aqui de como usar aqui.

http://thespoke.net/blogs/thiagocf/archive/2005/08/31/353202.aspx

Walter Amorim

Sim Thiago, é o mesmo Web Service.

Rafael Brugnollo

Gostei muito… mas queria ter aprendido a fazer uma classe que uzasse o webservice do correio e não aprender a usar sua classe… mesmo assim.. parabéns!

Rafael Brugnollo

Gostei muito… mas queria ter aprendido a fazer uma classe que uzasse o webservice do correio e não aprender a usar sua classe… mesmo assim.. parabéns!

Ludmilla Helena

Gosteiiiii Muitoooooo!!!!!!!!!!!!!!!!!

felipe

demaissssssssssssssssssssssssssssssssssssssssssssss

Toni

Segue um exemplo sobre como testar o web service dos correios usando a ferramenta SoapUI

http://regifelix.com/2013/01/06/testes-de-web-services-com-a-ferramenta-soapui/

Qual a sua opinião?