Módulo para validação, formatação e busca de informações de endereço através de CEP.
Este módulo fornece funções para:
O CEP segue o formato: XXXXX-XXX
(cep/is-valid? cep-string)
Valida um CEP com ou sem formatação.
Argumentos:
cep-string (string): CEP a validar, com ou sem formataçãoRetorna:
true se válido, false caso contrárioExemplos:
(cep/is-valid? "01310-100") ; => true
(cep/is-valid? "01310100") ; => true
(cep/is-valid? "0131010") ; => false (muito curto)
(cep/is-valid? "01310-10") ; => false (incompleto)
(cep/is-valid? "abcdefgh") ; => false (não numérico)
Validação:
(cep/format-cep cep-string)
Formata um CEP no padrão brasileiro XXXXX-XXX.
Argumentos:
cep-string (string): CEP a formatar (com ou sem formatação)Retorna:
Exemplos:
(cep/format-cep "01310100") ; => "01310-100"
(cep/format-cep "01310-100") ; => "01310-100"
(cep/format-cep "CEP: 01310100") ; => "01310-100" (remove não-dígitos)
(cep/format-cep "01310") ; => "01310" (parcial)
(cep/get-address-from-cep cep-string)
Busca informações de endereço completo através da ViaCEP API.
Argumentos:
cep-string (string): CEP a buscar (com ou sem formatação)Retorna:
{:cep "01310-100"
:logradouro "Avenida Paulista"
:complemento ""
:bairro "Bela Vista"
:localidade "São Paulo"
:uf "SP"
:ibge "3550308"
:gia ""
:ddd "11"
:siafi "7107"}
nil se CEP não encontradoExemplos:
; Clojure
(cep/get-address-from-cep "01310-100")
; => {:cep "01310-100" :logradouro "Avenida Paulista" :localidade "São Paulo" :uf "SP" ...}
; ClojureScript (retorna Promise)
(-> (cep/get-address-from-cep "01310-100")
(.then (fn [address] (println address))))
Notas:
(cep/get-cep-information-from-address logradouro localidade uf)
Busca CEP por endereço através da ViaCEP API.
Argumentos:
logradouro (string): Nome da rua/avenidalocalidade (string): Nome da cidadeuf (string): Código do estado (2 letras, ex: "SP")Retorna:
[] se nenhum resultado encontradoExemplos:
; Clojure
(cep/get-cep-information-from-address "Avenida Paulista" "São Paulo" "SP")
; => [{:cep "01310-100" :logradouro "Avenida Paulista" ...}
; {:cep "01311-200" :logradouro "Avenida Paulista" ...}]
; ClojureScript (retorna Promise)
(-> (cep/get-cep-information-from-address "Avenida Paulista" "São Paulo" "SP")
(.then (fn [results] (println results))))
(cep/validation-errors cep-string)
Retorna uma lista de erros de validação do CEP.
Argumentos:
cep-string (string): CEP a validarRetorna:
Exemplos:
(cep/validation-errors "01310-100") ; => []
(cep/validation-errors "123") ; => ["Invalid length"]
(cep/validation-errors "ABCDE-FGH") ; => ["Invalid CEP format"]
(cep/validation-errors "0131010")
; => ["Invalid length"]
(cep/validation-errors "ABCDE-FGH")
; => ["Invalid CEP format"]
; Tratamento de erro em requisição ViaCEP
(try
(cep/get-address-from-cep "00000-000") ; CEP válido mas pode não existir
(catch Exception e
(println "Erro ao buscar CEP:" (.getMessage e))))
(require '[brazilian-utils.cep :as cep])
(defn validar-cep-input [cep-input]
(if (cep/is-valid? cep-input)
{:status :valid :cep (cep/format-cep cep-input)}
{:status :invalid :errors (cep/validation-errors cep-input)}))
(validar-cep-input "01310100")
; => {:status :valid :cep "01310-100"}
(validar-cep-input "123")
; => {:status :invalid :errors ["Invalid length"]}
(defn find-address [cep-string]
(let [formatted-cep (cep/format-cep cep-string)]
(if (cep/is-valid? formatted-cep)
(let [address (cep/get-address-from-cep formatted-cep)]
(if address
{:status :found :address address}
{:status :not-found :cep formatted-cep}))
{:status :invalid :errors (cep/validation-errors cep-string)})))
(find-address "01310100")
; => {:status :found :address {:cep "01310-100" :logradouro "..." ...}}
(defn find-address [cep-string]
(-> (cep/get-address-from-cep cep-string)
(.then (fn [address]
(if address
{:status :found :address address}
{:status :not-found :cep cep-string})))
(.catch (fn [error]
{:status :error :message (.-message error)}))))
(find-address "01310100")
(defn find-ceps [street city state]
(let [results (cep/get-cep-information-from-address street city state)]
{:query {:street street :city city :state state}
:results results
:count (count results)}))
(find-ceps "Avenida Paulista" "São Paulo" "SP")
; => {:query {...} :results [...] :count 5}
(defn on-cep-blur [cep-value form-state]
(if (cep/is-valid? cep-value)
(let [address (cep/get-address-from-cep cep-value)]
(merge form-state
{:cep (cep/format-cep cep-value)
:street (:logradouro address)
:city (:localidade address)
:state (:uf address)
:neighborhood (:bairro address)}))
form-state))
O módulo utiliza a ViaCEP API (gratuita e sem autenticação) para busca de endereços:
https://viacep.com.br/ws/{cep}/json/Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |