[Opcional] Para facilitar o gerenciamento de dependências, eu recomendo utilizar o Boss.
boss install github.com/viniciussanchez/viacep
Adicione a seguinte pasta no seu projeto em Project > Options > Resource Compiler > Directories and Conditionals > Include file search path
../viacep/src
Você vai precisar fazer o uses das seguintes units: ViaCEP.Intf, ViaCEP.Core, ViaCEP.Model
uses ViaCEP.Intf, ViaCEP.Core, ViaCEP.Model;Quando consultado um CEP de formato inválido, por exemplo: 950100100 (9 dígitos), 95010A10 (alfanumérico), 95 01010 (espaço), o retorno será nil.
O método de validar se é um CEP válido ou não, apenas certifica-se de que o CEP informado possui 8 dígitos e que todos sejam numéricos, podendo ser acessado antes de consultar o webservice por meio da interface IViaCEP, utilizando o método Validate.
Quando consultado um CEP de formato válido, porém inexistente, por exemplo: 99999999, o retorno também será nil. Isso significa que o CEP consultado não foi encontrado na base de dados.
Exemplo:
var
ViaCEP: IViaCEP;
begin
ViaCEP := TViaCEP.Create;
if ViaCEP.Validate('01001000') then
ShowMessage('CEP válido')
else
ShowMessage('CEP inválido');
end;Vale lembrar que no método acima, não é necessário destruir a instância criada da classe TViaCEP, pelo fato de estar utilizando uma Interface.
var
ViaCEP: IViaCEP;
CEP: TViaCEPClass;
begin
ViaCEP := TViaCEP.Create;
// Aqui você pode chamar a rotina para validar se é um CEP válido.
CEP := ViaCEP.Get(edtCEPConsultar.Text);
if not Assigned(CEP) then
Exit; // Aqui você pode exibir uma mensagem para o usuário falando que o CEP não foi encontrado.
try
edtJSON.Lines.Text := CEP.ToJSONString;
edtCEP.Text := CEP.CEP;
edtLogradouro.Text := CEP.Logradouro;
edtComplemento.Text := CEP.Complemento;
edtBairro.Text := CEP.Bairro;
edtLocalidade.Text := CEP.Localidade;
edtUF.Text := CEP.UF;
edtDDD.Text := CEP.DDD;
edtIBGE.Text := CEP.IBGE;
edtGIA.Text := CEP.GIA;
finally
CEP.Free;
end;
end;Após realizar a consulta do CEP, você pode pegar o conteúdo retornado no formato JSON utilizando a método .ToJSONString disponível na classe TViaCEPClass. Veja o exemplo abaixo, onde é populado um TMemo com o conteúdo da consulta:
var
CEP: TViaCEPClass;
begin
Memo.Lines.Text := CEP.ToJSONString;
end;{
"cep": "01001-000",
"logradouro": "Praça da Sé",
"complemento": "lado ímpar",
"bairro": "Sé",
"localidade": "São Paulo",
"uf": "SP",
"ddd": "",
"ibge": "3550308",
"gia": "1004"
}
Acesse o formulário e atualize on-line: Atualizar CEP
Origem código IBGE dos municípios: Acessar Site
Origem código GIA/ICMS (apenas SP disponível): Visualizar PDF (Pág.137)
ViaCEP - Webservice CEP e IBGE gratuito: Acessar Site
