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 65 66 67 68 69 70 71 72 73 74 75
|
# frozen_string_literal: true
module FFaker
module IdentificationBR
extend ModuleUtils
extend self
GENDERS = %w[Feminino Masculino].freeze
CPF_VERIFICATION_MULTIPLIERS = [11, 10, 9, 8, 7, 6, 5, 4, 3, 2].freeze
CNPJ_VERIFICATION_MULTIPLIERS = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2].freeze
def cpf
cpf = FFaker.numerify('#########')
validators = cpf_verification_digits(cpf)
cpf + validators.join
end
def pretty_cpf
cpf_numbers = cpf
"#{cpf_numbers[0..2]}.#{cpf_numbers[3..5]}.#{cpf_numbers[6..8]}-#{cpf_numbers[9..10]}"
end
def cnpj
cnpj = FFaker.numerify('############')
validators = cnpj_verification_digits(cnpj)
cnpj + validators.join
end
def pretty_cnpj
cnpj_numbers = cnpj.to_s.rjust(14, '0')
"#{cnpj_numbers[0..1]}.#{cnpj_numbers[2..4]}.#{cnpj_numbers[5..7]}/#{cnpj_numbers[8..11]}-#{cnpj_numbers[12..14]}"
end
def rg
FFaker.numerify('#########')
end
def pretty_rg
FFaker.numerify('###.###.###')
end
def gender
fetch_sample(GENDERS)
end
def cpf_verification_digits(cpf)
document_verification_digits(CPF_VERIFICATION_MULTIPLIERS, cpf)
end
def cnpj_verification_digits(cnpj)
document_verification_digits(CNPJ_VERIFICATION_MULTIPLIERS, cnpj)
end
private
def document_verification_digits(verification_multipliers, document = nil)
return false if document.nil?
document_digits = document.to_s.scan(/[0-9]/).map(&:to_i)
validation_digits = []
if document_digits.size + 1 == verification_multipliers.size && document_digits.uniq.size > 1
0.upto(1) do |i|
sum = verification_multipliers.drop(1 - i).each_with_index.inject(0) do |val, (value, j)|
val + (document_digits[j] * value)
end
validation_digits[i] = (sum %= 11) < 2 ? 0 : 11 - sum
document_digits.push(validation_digits[i])
end
return validation_digits
end
[]
end
end
end
|