GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Como verificar se o CEP é valido ? através dos correios ? [RESOLVIDO]


#1

Alguem sabe como fazer ??? como encontrar verificar via JAVA nos correios c um CEP é valido ??

Pronto, segue abaixo, a minha solução, em 2 formatos,

1° em Query String funciona em sua plenitude, e não se faz necessário nenhuma biblioteca adcional, funciona apenas com as APIs basicas do java

2° em XML onde se faz necessario o uso das bibliotecas dom4j-1.6.1.jar, contida na pasta lib

utiliza para consulta o site => http://www.republicavirtual.com.br/cep/exemplos.php

exemplo de uso

import org.lavieri.modelutil.cep.WebServiceCep;
import org.lavieri.modelutil.cep.CepSearchEngineByQueryString;
/**
 * Teste via Query String
 * @author Tomaz Lavieri
 */
public class TesteQueryString {
	public static void main(String[] args) {
		//Faz a busca para o cep 13.345-325
		//A ferramenta de busca ignora qualquer caracter que não seja número.
		WebServiceCep cep = CepSearchEngineByQueryString.searchCep("13.345-325");
		//Apenas o procedimento acima é necessario para obter os dados do site.
		//...
		//Imprimindo as informações dentro da variavel cep no console.
		//caso a busca ocorra bem, imprime os resultados.
		if (cep.wasSuccessful()) {
			System.out.println("Cep: "+cep.getCep());
			System.out.println("Logradouro: "+cep.getLogradouroFull());
			System.out.println("Bairro: "+cep.getBairro());
			System.out.println("Cidade: "+
					cep.getCidade()+"/"+ cep.getUf());
		//caso haja problemas imprime as exceções.
		} else {
			System.out.println("Erro número: " + cep.getResulCode());
			System.out.println("Descrição do erro: " + cep.getResultText());
			if (cep.getException() != null)
				cep.getException().printStackTrace() ;
		}
	}   
}

Interface WebServiceCep.java segue abaixo (que é o resultado da busca no site)

package org.lavieri.modelutil.cep;
/**
 * Interface de consulta contendo os dados encapsulados da busca no site
 * <a href="http://www.republicavirtual.com.br" 
 * target="_blank">republicavirtual.com.br</a>. 
 * <BR>
 * <BR>Consulte as classes de <i>Search Engine</i> {@link CepSearchEngineByQueryString}
 * e {@link CepSearchEngineByXML}, para saber como recuperar os
 * dados do CEP do site.
 * <BR>
 * <BR>Last Revision: 01/10/2009 (US Data)
 * 
 * @see CepSearchEngineByQueryString
 * @see CepSearchEngineByXML
 * @see SearchEngineResults
 * @author Tomaz Lavieri
 * @since 01/10/09
 * @version 1.01
 */
public interface WebServiceCep {
	/**
	 * {@link SearchEngineResults} contendo o resultado da operação, de onde pode-se 
	 * consultar tanto a msg do resultado, como o seu código. Use os métodos
	 * {@link SearchEngineResults#getCode()} e {@link SearchEngineResults#getMessage()}
	 * para a consulta.
	 * @return {@link SearchEngineResults} contendo o resultado da operação.
	 */
	public SearchEngineResults getResult();
	/**
	 * Informa o código do resultado da pesquisa.
	 * <BR>Códigos conhecidos:
	 * <BR><tt>-1</tt> : busca não realizada
	 * <BR><tt>0</tt> : cep não encontrado
	 * <BR><tt>1</tt> : cep econtrado
	 * <BR><tt>-14</tt> : Site não encontrado (pode ser por problemas na internet).
	 * <BR><tt>-15</tt> : Não foi possivel ler o documento xml
	 * <BR><tt>-16</tt> : Erro na formação da url
	 * <BR><tt>-17</tt> : Erro inesperado
	 * 
	 * 
	 * @return <tt>int</tt> Código do resultado.
	 */
	public int getResulCode();
	/**
	 * Informação textual sobre o resultado da pesquisa
	 * @return {@link String} contendo a descrição do resultado da pesquisa.
	 */
	public String getResultText();
	/**
	 * Informa se o cep foi encontrado com sucesso.
	 * @return	<tt>true</tt> - caso a pesquisa ache um resultado no banco.
	 * 			<BR><tt>false</tt> - caso haja falhas, ou o cep enviado não esteja 
	 * 			cadastrado.
	 */
	public boolean wasSuccessful();
	/**
	 * Informa se não existe o cep cadastrado.
	 * @return	<tt>true</tt> - Caso o cep não tenha cido encontrado.
	 * 			<BR><tt>false</tt> - Caso haja falhas, ou caso o cep esteja cadastrado.
	 */
	public boolean isCepNotFound();
	/**
	 * Informa se houve falhas na busca do cep
	 * @return	<tt>true</tt> - Caso ocorra falhas
	 * 			<BR><tt>false</tt> - Caso não haja falhas.
	 */
	public boolean hasException();
	/**
	 * Pega a exceção que ocorreu durante a busca, retorna null caso não haja exceções.
	 * @return	<tt>{@link Exception}</tt> - Caso ocorra falhas
	 * 			<BR><tt>null</tt> - Caso não haja falhas.
	 */
	public Exception getException();
	/**
	 * Informa o bairro
	 * @return {@link String} contendo o nome bairro
	 */
	public String getBairro();
	/**
	 * Informa a cidade
	 * @return {@link String} contendo o nome da Cidade
	 */
	public String getCidade();
	/**
	 * Informa a Unidade Federativa
	 * @return {@link String} contendo o nome da Unidade Federativa
	 */
	public String getUf();
	/**
	 * Informa o logradouro.
	 * @return {@link String} contendo o nome do Logradouro
	 */
	public String getLogradouro();
	/**
	 * Informa o logradouro junto com o tipo de logradouro.
	 * @return {@link String} contendo o tipo de Logradouro + nome do Logradouro.
	 */
	public String getLogradouroFull();
	/**
	 * Informa o tipo do logradouro.
	 * @return {@link String} contendo o tipo de logradouuro.
	 */
	public String getLogradouroType();
	/**
	 * Informa o cep.
	 * @return {@link String} contendo o cep.
	 */
	public String getCep();
}

#2

A maneira correta é comprando a base de dados deles. Outra maneira é procurar por alguém que disponibiliza algum banco grátis(em geral desatualizado) e usar no seu programa.

Até!


#3

Acredito que dê pra fazer algo tipo um Curl do php. Desta maneira eu já fiz (em php).

Já vi uma aplicação em java que envia torpedo de celular utilizando por traz a pagina de envio de torpedos dos sites das operadoras.


#4

Completando a informação do meu post:
http://www.correios.com.br/servicos/cep/dne.cfm

Acho que serviços de e-commerce como o da locaweb já fornecem um serviço de busca de cep.

Até!


#5

Achei esse link => http://cep.maneh.org/download.php?maneh/db-mysql
com base de dados de 2004 segundo o site.... =/

correios FDP, devia ter um .xml pra disponibilizar isso


#6

tb econtrei esse range de CEP por região ^^, ta em PHP mais é legivel a qualquer um ...

<?php
$ceps[acre_capital] = "69900/69920";
$ceps[acre_interior] = "69921/69999";
$ceps[alagoas_capital] = "57000/57099";
$ceps[alagoas_interior] = "57100/57999";
$ceps[amapa_capital] = "68900/68929";
$ceps[amapa_interior] = "68930/68999";
$ceps[amazonas_capital] = "69000/69099";
$ceps[amazonas_interior] = "69100/69899";
$ceps[bahia_capital] = "40000/44470";
$ceps[bahia_interior] = "44471/48499";
$ceps[ceara_capital] = "60000/61939";
$ceps[ceara_interior] = "61940/63999";;
$ceps[df_capital] = "70000/73699";
$ceps[espiritosanto_capital] = "29000/29184";
$ceps[espiritosanto_interior] = "29185/29999";
$ceps[goias_capital] = "74000/75259";
$ceps[goias_interior] = "75260/76999";
$ceps[maranhao_capital] = "65000/65099";
$ceps[maranhao_interior] = "65100/65999";
$ceps[matogrosso_capital] = "78000/78169";
$ceps[matogrosso_interior] = "78170/78899";
$ceps[matogrossodosul_capital] = "79000/79124";
$ceps[matogrossodosul_interior] = "79125/79999";
$ceps[minasgerais_capital] = "30000/34999";
$ceps[minasgerais_interior] = "35000/39999";
$ceps[para_capital] = "66000/67999";
$ceps[para_interior] = "68000/68899";
$ceps[paraiba_capital] = "58000/58099";
$ceps[paraiba_interior] = "58100/58999";
$ceps[parana_capital] = "80000/83939";
$ceps[parana_interior] = "83940/87999";
$ceps[pernambuco_capital] = "50000/54799";
$ceps[pernambuco_interior] = "54780/56999";
$ceps[piaui_capital] = "64000/64099";
$ceps[piaui_interior] = "64100/64999";
$ceps[riodejaneiro_capital] = "20000/24799";
$ceps[riodejaneiro_interior] = "24780/28999";
$ceps[riograndedonorte_capital] = "59000/59149";
$ceps[riograndedonorte_interior] = "59150/59999";
$ceps[riograndedosul_capital] = "90000/91999";
$ceps[riograndedosul_interior] = "92000/99999";
$ceps[rondonia_capital] = "78900/78924";
$ceps[rondonia_interior] = "78925/78999";
$ceps[roraima_capital] = "69300/69339";
$ceps[roraima_interior] = "69340/69399";
$ceps[santacatarina_capital] = "88000/88179";
$ceps[santacatarina_interior] = "88180/89999";
$ceps[saopaulo_capital] = "01000/09999";
$ceps[saopaulo_interior] = "10000/19999";
$ceps[sergipe_capital] = "49000/49099";
$ceps[sergipe_interior] = "49100/49999";
$ceps[tocantins_capital] = "77000/77299";
$ceps[tocantins_interior] = "77300/77999";
$ecep = explode("/", $ceps[$_POST[estado]]);
$error = 0;
if($_POST[cep] < $ecep[0] OR $_POST[cep] > $ecep[1]){
$error++;
}
?>

#7

outra informação importante ... região onde os cep foram alterados

http://www.correios.com.br/servicos/cep/Relacao_de_Localidades_com_CEP_Alterados_julho2008.pdf


#8

Eu acho que nem precisa disso.

Se souber trabalhar com COOKIES em java deve dar pra fazer igual ao php. Só utilizar o cookie de pesquisa cep do correio e pegar o retorno da pesquisa (cookie tambem). Nunca trabalhei com isso em java, só em php. Estou começando jsp agora.

Fica lento e se o site dos correios estiver fora nao roda.

Bom, é uma opção.


#9

Apesar da informação dos ceps ser de domínio público, o serviço de catalogar e manter atualizado dos correios não. Utilizar o serviço de busca deles por alguma maneira que não seja do próprio site deles é ilegal.

Mas não que muitos pensem nisso mesmo.

Até!


#10

eis a solução....

http://www.republicavirtual.com.br/cep/codigos.php

abraços


#11

thanks!!! vlw mesmo! salvou a patria ^^


#12

cara eu tenho uma funcaozinha aki que valida apenas a faixa de valores por regex mesmo.. soh nao esta em java, mas esta simples de adaptar....se ajudar:

function cep ($uf,$cep) {
        $cep=self::_toNumber($cep);
        $uf=strtoupper ($uf);
        if      ($uf=='SP') $regex = '/^([1][0-9]{3}|[01][0-9]{4})' . '[0-9]{3}$/';
        else if ($uf=='RJ') $regex = '/^[2][0-8][0-9]{3}'           . '[0-9]{3}$/';
        else if ($uf=='MS') $regex = '/^[7][9][0-9]{3}'             . '[0-9]{3}$/';
        else if ($uf=='MG') $regex = '/^[3][0-9]{4}'                . '[0-9]{3}$/';
        else if ($uf=='MT') $regex = '/^[7][8][8][0-9]{2}'          . '[0-9]{3}$/';
        else if ($uf=='AC') $regex = '/^[6][9]{2}[0-9]{2}'          . '[0-9]{3}$/';
        else if ($uf=='AL') $regex = '/^[5][7][0-9]{3}'             . '[0-9]{3}$/';
        else if ($uf=='AM') $regex = '/^[6][9][0-8][0-9]{2}'        . '[0-9]{3}$/';
        else if ($uf=='AP') $regex = '/^[6][89][9][0-9]{2}'         . '[0-9]{3}$/';
        else if ($uf=='BA') $regex = '/^[4][0-8][0-9]{3}'           . '[0-9]{3}$/';
        else if ($uf=='CE') $regex = '/^[6][0-3][0-9]{3}'           . '[0-9]{3}$/';
        else if ($uf=='DF') $regex = '/^[7][0-3][0-6][0-9]{2}'      . '[0-9]{3}$/';
        else if ($uf=='ES') $regex = '/^[2][9][0-9]{3}'             . '[0-9]{3}$/';
        else if ($uf=='GO') $regex = '/^[7][3-6][7-9][0-9]{2}'      . '[0-9]{3}$/';
        else if ($uf=='MA') $regex = '/^[6][5][0-9]{3}'             . '[0-9]{3}$/';
        else if ($uf=='PA') $regex = '/^[6][6-8][0-8][0-9]{2}'      . '[0-9]{3}$/';
        else if ($uf=='PB') $regex = '/^[5][8][0-9]{3}'             . '[0-9]{3}$/';
        else if ($uf=='PE') $regex = '/^[5][0-6][0-9]{2}'           . '[0-9]{3}$/';
        else if ($uf=='PI') $regex = '/^[6][4][0-9]{3}'             . '[0-9]{3}$/';
        else if ($uf=='PR') $regex = '/^[8][0-7][0-9]{3}'           . '[0-9]{3}$/';
        else if ($uf=='RN') $regex = '/^[5][9][0-9]{3}'             . '[0-9]{3}$/';
        else if ($uf=='RO') $regex = '/^[7][8][9][0-9]{2}'          . '[0-9]{3}$/';
        else if ($uf=='RR') $regex = '/^[6][9][3][0-9]{2}'          . '[0-9]{3}$/';
        else if ($uf=='RS') $regex = '/^[9][0-9]{4}'                . '[0-9]{3}$/';
        else if ($uf=='SC') $regex = '/^[8][89][0-9]{3}'            . '[0-9]{3}$/';
        else if ($uf=='SE') $regex = '/^[4][9][0-9]{3}'             . '[0-9]{3}$/';
        else if ($uf=='TO') $regex = '/^[7][7][0-9]{3}'             . '[0-9]{3}$/';
        else return false;
        if(!preg_match($regex,$cep)) return false;
        return true;
    }

#13

pronto resolvido, vejam o arquivo atachado no 1° post

http://www.guj.com.br/posts/list/114510.java#618995


#14

Adcionei ao post principal, o primeiro aqui dessa seguencia, os arquivos contendo a solução que fiz...

uma que utiliza o pacote dom4j-1.6.1.jar e outro que não depende de pacote algum e utiliza o link de query string para consultar os dados do site republicavirtual.com.br

com isso fica resolvido o problema de cep

veja esse link http://www.guj.com.br/posts/list/114510.java#618995
aqui o arquivo mais atual.


#15