class DataMaker::Validators::ChineseNINValidator

Attributes

nin[RW]

Public Class Methods

new(nin) click to toggle source
# File lib/data_maker/validators/chinese_nin_validator.rb, line 6
def initialize(nin)
  self.nin = nin
end
valid?(*args) click to toggle source
# File lib/data_maker/validators/chinese_nin_validator.rb, line 10
def self.valid?(*args)
  new(*args).valid?
end

Public Instance Methods

valid?() click to toggle source
# File lib/data_maker/validators/chinese_nin_validator.rb, line 14
def valid?
  raise ArgumentError, "Please pass a NIN to validate!" if nin.nil?
  valid_length? && valid_nin?
end
valid_length?() click to toggle source
# File lib/data_maker/validators/chinese_nin_validator.rb, line 19
def valid_length?
  nin.length == 18
end
valid_nin?() click to toggle source
# File lib/data_maker/validators/chinese_nin_validator.rb, line 23
def valid_nin?
  checksum = 0
  weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  summod = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2]
  weights.each_with_index do |weight, i|
    checksum += (weight * nin[i].to_i)
  end
  nin[17] == summod[(checksum % 11)].to_s
end