module TwidValidator

Public Class Methods

valid?(twid, case_sensitive = true) click to toggle source
# File lib/taiwanese_id_validator/twid_validator.rb, line 4
def self.valid?(twid, case_sensitive = true)
  twid = twid.upcase unless case_sensitive

  return false if twid.length != 10
  return false if !( /[A-Z](1|2)\d{8}\z/ =~ twid )

  characters = twid.chars
  digits = TwidMapping::TWID_LETTER[characters.shift] + characters.map(&:to_i)

  weighted_sum = calculate_weighted_sum(digits)

  return weighted_sum % 10 == 0
end

Private Class Methods

calculate_weighted_sum(digits) click to toggle source
# File lib/taiwanese_id_validator/twid_validator.rb, line 20
def self.calculate_weighted_sum(digits)
  sum = 0
  11.times do |i|
    m = digits[i] * TwidMapping::MULTIPLIER[i]
    sum += m
  end
  sum
end