-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathvalidador.rb
More file actions
64 lines (52 loc) · 1.5 KB
/
Copy pathvalidador.rb
File metadata and controls
64 lines (52 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# Função para remover caracteres não numéricos
def remove_non_numeric(str)
str.gsub(/\D/, '')
end
# Função para calcular o dígito verificador
def calculate_digit(numbers, weights)
sum = numbers.zip(weights).map { |n, w| n * w }.reduce(:+)
remainder = sum % 11
remainder < 2 ? 0 : 11 - remainder
end
# Função para validar CNPJ
def validar_cnpj(cnpj)
cnpj = remove_non_numeric(cnpj)
return false unless cnpj.length == 14
weights1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
weights2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
digits = cnpj.chars.map(&:to_i)
digit1 = calculate_digit(digits[0..11], weights1)
digit2 = calculate_digit(digits[0..12], weights2)
digits[12] == digit1 && digits[13] == digit2
end
# Função para validar CPF
def validar_cpf(cpf)
cpf = remove_non_numeric(cpf)
return false unless cpf.length == 11
weights1 = [10, 9, 8, 7, 6, 5, 4, 3, 2]
weights2 = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2]
digits = cpf.chars.map(&:to_i)
digit1 = calculate_digit(digits[0..8], weights1)
digit2 = calculate_digit(digits[0..9], weights2)
digits[9] == digit1 && digits[10] == digit2
end
# Função principal para interação com o usuário
def main
puts "Digite o CNPJ ou CPF para validação:"
input = gets.chomp
if input.length > 11
if validar_cnpj(input)
puts "CNPJ válido."
else
puts "CNPJ inválido."
end
else
if validar_cpf(input)
puts "CPF válido."
else
puts "CPF inválido."
end
end
end
# Executa a função principal
main