Created
February 24, 2021 18:23
-
-
Save emtudo/f2e8740766b6e0475e335b6e36a6c69a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Primeira versão, ainda precisa verificar se tem 11 dígitos | |
# Devolver true/false | |
# Tratar excessão de caracteres inválidos | |
defmodule Cpfcalc.Valid do | |
def calc(cpf) do | |
String.codepoints(cpf) | |
|> Enum.map(fn d -> String.to_integer(d) end) | |
|> IO.inspect() | |
|> calcD10() | |
end | |
defp calcD10(params) do | |
[d1, d2, d3, d4, d5, d6, d7, d8, d9, d10 | rest] = params | |
l = (10*d1) + (9*d2) + (8*d3) + (7*d4) + (6*d5) + (5*d6) + (4*d7) + (3*d8) + (2*d9) | |
r = rem(l, 11) | |
digitRest(r) | |
|> digitEqual(d10) | |
|> calcD11(params) | |
end | |
defp digitRest(value) when value <= 1 do | |
0 | |
end | |
defp digitRest(value) when value >= 2 do | |
11 - value | |
end | |
defp calcD11({:error, _}, _) do | |
handle_response({:error, "Invalid"}) | |
end | |
defp digitEqual(value, verify) when value == verify do | |
{:ok, verify} | |
end | |
defp digitEqual(value, verify) when value != verify do | |
{:error, verify} | |
end | |
defp calcD11({:ok, value}, params) do | |
[d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11] = params | |
m = (10*d2) + (9*d3) + (8*d4) + (7*d5) + (6*d6) + (5*d7) + (4*d8) + (3*d9) + (2*d10) | |
r = rem(m, 11) | |
digitRest(r) | |
|> digitEqual(d11) | |
|> handle_response() | |
end | |
defp handle_response({:ok, _}) do | |
"CPF Válido" | |
end | |
defp handle_response({:error, _}) do | |
"CPF Inválido" | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment