Módulo para validação de PIS (Programa de Integração Social), incluindo verificação de dígito verificador e remoção de caracteres de formatação.
O módulo pis fornece validação completa de números PIS brasileiros, com suporte a:
Principais capacidades:
O PIS é um número de 11 dígitos que identifica um trabalhador no programa:
XXXXXXXXXXX
Formato com formatação:
XXX.XXXXX.XX-X
Características:
A validação PIS utiliza módulo 11:
is-valid?Valida se um número PIS é válido.
Assinatura:
(is-valid? pis)
Argumentos:
pis - String com PIS (formatada ou não)Retorna: Boolean - true se for válido, false caso contrário
Exemplos:
(is-valid? "120.56874.10-7") ; => true/false (depende de dígito verificador)
(is-valid? "12056874107") ; => true/false
(is-valid? "00000000000") ; => false (dígitos repetidos)
(is-valid? "12345678901") ; => false (dígito verificador inválido)
(is-valid? "1234567890") ; => false (10 dígitos)
(is-valid? nil) ; => false
(is-valid? "") ; => false
remove-symbolsRemove todos os caracteres não numéricos de um PIS.
Assinatura:
(remove-symbols pis)
Argumentos:
pis - String com PIS (formatada ou não); nil permitidoRetorna: String contendo apenas dígitos
Exemplos:
(remove-symbols "120.56874.10-7") ; => "12056874107"
(remove-symbols "12056874107") ; => "12056874107"
(remove-symbols "120 568 741 07") ; => "12056874107"
(remove-symbols nil) ; => ""
(remove-symbols "") ; => ""
O módulo não lança exceções. Retorna false para entradas inválidas:
;; Formato inválido
(is-valid? "ABCDEFGHIJK") ; => false
(is-valid? "12345678") ; => false (10 dígitos)
;; Valores nulos/vazios
(is-valid? nil) ; => false
(is-valid? "") ; => false
;; Dígitos repetidos
(is-valid? "00000000000") ; => false
(is-valid? "11111111111") ; => false
;; Dígitos verificadores inválidos
(is-valid? "12345678901") ; => false (verificador incorreto)
;; Números formatados
(is-valid? "120.56874.10-7") ; => true/false (depende de algoritmo)
(defn register-employee [employee-info]
(let [{:keys [name pis]} employee-info
clean-pis (remove-symbols pis)]
(if (is-valid? clean-pis)
{:status :success :employee {:name name :pis clean-pis}}
{:status :error :message "PIS inválido"})))
(register-employee {:name "João Silva" :pis "120.56874.10-7"})
; => {:status :success :employee {...}}
(defn normalize-pis [pis-input]
(let [cleaned (remove-symbols pis-input)
trimmed (clojure.string/trim cleaned)]
(when (is-valid? trimmed)
trimmed)))
(normalize-pis " 120.56874.10-7 ")
; => "12056874107"
(normalize-pis "invalid")
; => nil
(defn validate-employees [employees]
(map (fn [emp]
(assoc emp
:pis-valid? (is-valid? (remove-symbols (:pis emp)))))
employees))
(validate-employees
[{:name "João" :pis "120.56874.10-7"}
{:name "Maria" :pis "invalid"}
{:name "Pedro" :pis "130.12345.67-8"}])
; => [{:pis-valid? true} {:pis-valid? false} ...]
(defn process-payroll [employees]
(let [valid-employees (filter
#(is-valid? (remove-symbols (:pis %)))
employees)
invalid-employees (filter
#(not (is-valid? (remove-symbols (:pis %))))
employees)]
{:total (count employees)
:valid (count valid-employees)
:invalid (count invalid-employees)
:valid-employees valid-employees
:invalid-employees invalid-employees}))
(process-payroll employees-list)
; => {:total 100 :valid 95 :invalid 5 :valid-employees [...] :invalid-employees [...]}
(defn filter-valid-pis [pis-list]
(->> pis-list
(map remove-symbols)
(filter is-valid?)))
(filter-valid-pis
["120.56874.10-7"
"invalid"
"130.12345.67-8"
nil])
; => ["12056874107" "13012345678"]
(defn submit-fgts-data [worker-data]
(let [pis (remove-symbols (:pis worker-data))]
(if (is-valid? pis)
{:status :submitted
:worker {:name (:name worker-data)
:pis pis
:fgts-account (:fgts-account worker-data)}}
{:status :error
:message "PIS inválido - não foi possível submeter dados de FGTS"})))
(submit-fgts-data {:name "Ana Silva" :pis "120.56874.10-7" :fgts-account "123456"})
; => {:status :submitted :worker {...}}
| Formato | Exemplo | Válido |
|---|---|---|
| Sem formatação | 12056874107 | ✅ |
| Com pontos e hífen | 120.56874.10-7 | ✅ |
| Com espaços | 120 568 741 07 | ✅ |
| Parcial | 120 568 74107 | ✅ |
| 10 dígitos | 1205687410 | ❌ |
| 12 dígitos | 120568741070 | ❌ |
| Programa | Sigla | Uso |
|---|---|---|
| Programa de Integração Social | PIS | Benefícios do trabalhador |
| PASEP | PASEP | Complemento ao PIS |
| FGTS | FGTS | Fundo de Garantia do Tempo de Serviço |
| Poupança | CEF | Conta do FGTS |
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 |