Sha256: e7b022b2bb62e990782c3e4470fd09faa31cd0a81329101b5f2c1aca0c8824d2

Contents?: true

Size: 1.52 KB

Versions: 3

Compression:

Stored size: 1.52 KB

Contents

require 'taiwanese_id_validator/twid_mapping'

module TwidGenerator
  # TODO: Refactor this method first!
  def self.generate(gender = nil)
    sum = 0
    twid = ""

    first_letter = TwidMapping::TWID_LETTER.keys.sample

    sum += TwidMapping::TWID_LETTER[first_letter][0] * TwidMapping::MULTIPLIER[0]
    sum += TwidMapping::TWID_LETTER[first_letter][1] * TwidMapping::MULTIPLIER[1]


    twid += first_letter.to_s

    case gender
    when "male"
      second_letter = 1
    when "female"
      second_letter = 2
    else
      second_letter = [1, 2].sample
    end
    sum += second_letter * TwidMapping::MULTIPLIER[2]
    twid += second_letter.to_s

    6.times do |i|
      letter = Random.rand(1..9)
      sum += letter * TwidMapping::MULTIPLIER[i + 3]
      twid += letter.to_s
    end

    if sum % 10 == 0
      last_two_letter = Random.rand(1..9)
      sum += last_two_letter
      twid += last_two_letter.to_s

      last_letter = 10 - last_two_letter
      sum += last_letter
      twid += last_letter.to_s
    elsif sum % 10 == 9
      last_two_letter = Random.rand(2..10)
      sum += last_two_letter
      twid += last_two_letter.to_s

      last_letter = 11 - last_two_letter
      sum += last_letter
      twid += last_letter.to_s
    else
      max_range = 10 - (sum % 10) - 1
      last_two_letter = Random.rand(1..max_range)
      sum += last_two_letter
      twid += last_two_letter.to_s

      last_letter = max_range + 1 - last_two_letter
      sum += last_letter
      twid += last_letter.to_s
    end

    return twid
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
taiwanese_id_validator-0.0.3 lib/taiwanese_id_validator/twid_generator.rb
taiwanese_id_validator-0.0.2 lib/taiwanese_id_validator/twid_generator.rb
taiwanese_id_validator-0.0.1 lib/taiwanese_id_validator/twid_generator.rb