class ZAIDNumber

Constants

CITIZENSHIP_RANGE
FEMALE_RANGE
MALE_RANGE
PERMANENT_RESIDENT
REQUIRED_ID_LENGTH
ZA_CITIZEN

Attributes

id_number[R]

Public Class Methods

new(id_num) click to toggle source
# File lib/za_id_number.rb, line 15
def initialize(id_num)
  @id_number = id_num.to_s
end

Public Instance Methods

citizenship() click to toggle source
# File lib/za_id_number.rb, line 65
def citizenship
  za_citizen? ? :za_citizen : :permanent_resident
end
date_of_birth() click to toggle source
# File lib/za_id_number.rb, line 47
def date_of_birth
  Date.parse("#{@id_number[0..1]}-#{@id_number[2..3]}-#{@id_number[4..5]}")
rescue ArgumentError
  nil
end
female?() click to toggle source
# File lib/za_id_number.rb, line 57
def female?
  FEMALE_RANGE.include? @id_number[6..9].to_i
end
gender() click to toggle source
# File lib/za_id_number.rb, line 53
def gender
  female? ? :f : :m
end
male?() click to toggle source
# File lib/za_id_number.rb, line 61
def male?
  !female?
end
only_digits?() click to toggle source
# File lib/za_id_number.rb, line 35
def only_digits?
  @id_number.to_s.gsub(/\D*/, '') == @id_number.to_s
end
permanent_resident?() click to toggle source
# File lib/za_id_number.rb, line 73
def permanent_resident?
  !za_citizen?
end
valid?() click to toggle source
# File lib/za_id_number.rb, line 19
def valid?
  valid_length?      &&
  only_digits?       &&
  valid_date?        &&
  valid_citizenship? &&
  valid_checksum?
end
valid_checksum?() click to toggle source
# File lib/za_id_number.rb, line 27
def valid_checksum?
  Luhn.valid? @id_number
end
valid_citizenship?() click to toggle source
# File lib/za_id_number.rb, line 43
def valid_citizenship?
  CITIZENSHIP_RANGE.include? @id_number[10].to_i
end
valid_date?() click to toggle source
# File lib/za_id_number.rb, line 39
def valid_date?
  date_of_birth ? true : false
end
valid_length?() click to toggle source
# File lib/za_id_number.rb, line 31
def valid_length?
  @id_number.length == REQUIRED_ID_LENGTH
end
za_citizen?() click to toggle source
# File lib/za_id_number.rb, line 69
def za_citizen?
  @id_number[10].to_i == ZA_CITIZEN
end