class Faker::SpanishDocuments
Constants
- CIF_CONTROL_LETTERS
- CIF_LETTERS
- CIF_LETTERS_NUMBER
- NIE_LETTERS
- NIF_LETTERS
Public Class Methods
cif(letter=nil)
click to toggle source
# File lib/faker_spanish_documents.rb, line 27 def cif(letter=nil) first_letter = letter && CIF_LETTERS.include?(letter) ? letter : CIF_LETTERS.sample province_code = Faker::Number.number(digits: 2) random_number = Faker::Number.number(digits: 5) number = "#{province_code}#{random_number}" control_code = cif_control_code(number, first_letter) "#{first_letter}#{number}#{control_code}" end
dni()
click to toggle source
# File lib/faker_spanish_documents.rb, line 13 def dni number = Faker::Number.number(digits: 8).to_i "#{number}#{nif_letter(number)}" end
nie(letter=nil)
click to toggle source
# File lib/faker_spanish_documents.rb, line 18 def nie(letter=nil) first_letter = letter && NIE_LETTERS.include?(letter) ? letter : NIE_LETTERS.sample first_number = NIE_LETTERS.find_index { |e| e == first_letter } number_part = Faker::Number.number(digits: 7) number_for_calculation = "#{first_number}#{number_part}".to_i "#{first_letter}#{number_part}#{nif_letter(number_for_calculation)}" end
Private Class Methods
cif_control_code(number, first_letter)
click to toggle source
# File lib/faker_spanish_documents.rb, line 40 def cif_control_code(number, first_letter) total = number .split('') .each_with_index .inject(0) do |acc, (element, index)| acc += if index.even? (element.to_i * 2).digits.inject(:+) else element.to_i end end decimal = total.digits.first control = decimal != 0 ? 10 - decimal : decimal if CIF_LETTERS_NUMBER.include?(first_letter) || number.start_with?('00') # Control code will be a letter CIF_CONTROL_LETTERS[control] else # Control code will be a number control end end
nif_letter(number)
click to toggle source
# File lib/faker_spanish_documents.rb, line 64 def nif_letter(number) NIF_LETTERS[number % NIF_LETTERS.length] end