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