Class: ZAIDNumber
- Inherits:
-
Object
- Object
- ZAIDNumber
- Defined in:
- lib/za_id_number.rb,
lib/za_id_number/version.rb
Defined Under Namespace
Classes: Version
Constant Summary collapse
- REQUIRED_ID_LENGTH =
13- FEMALE_RANGE =
(0..4999)
- MALE_RANGE =
(5000..9999)
- CITIZENSHIP_RANGE =
(0..1)
- ZA_CITIZEN =
0- PERMANENT_RESIDENT =
1
Instance Attribute Summary collapse
-
#id_number ⇒ Object
readonly
Returns the value of attribute id_number.
Instance Method Summary collapse
- #citizenship ⇒ Object
- #date_of_birth ⇒ Object
- #female? ⇒ Boolean
- #gender ⇒ Object
-
#initialize(id_num) ⇒ ZAIDNumber
constructor
A new instance of ZAIDNumber.
- #male? ⇒ Boolean
- #only_digits? ⇒ Boolean
- #permanent_resident? ⇒ Boolean
- #valid? ⇒ Boolean
- #valid_checksum? ⇒ Boolean
- #valid_citizenship? ⇒ Boolean
- #valid_date? ⇒ Boolean
- #valid_length? ⇒ Boolean
- #za_citizen? ⇒ Boolean
Constructor Details
#initialize(id_num) ⇒ ZAIDNumber
15 16 17 |
# File 'lib/za_id_number.rb', line 15 def initialize(id_num) @id_number = id_num.to_s end |
Instance Attribute Details
#id_number ⇒ Object (readonly)
Returns the value of attribute id_number.
13 14 15 |
# File 'lib/za_id_number.rb', line 13 def id_number @id_number end |
Instance Method Details
#citizenship ⇒ Object
65 66 67 |
# File 'lib/za_id_number.rb', line 65 def citizenship za_citizen? ? :za_citizen : :permanent_resident end |
#date_of_birth ⇒ Object
47 48 49 50 51 |
# 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? ⇒ Boolean
57 58 59 |
# File 'lib/za_id_number.rb', line 57 def female? FEMALE_RANGE.include? @id_number[6..9].to_i end |
#gender ⇒ Object
53 54 55 |
# File 'lib/za_id_number.rb', line 53 def gender female? ? :f : :m end |
#male? ⇒ Boolean
61 62 63 |
# File 'lib/za_id_number.rb', line 61 def male? !female? end |
#only_digits? ⇒ Boolean
35 36 37 |
# File 'lib/za_id_number.rb', line 35 def only_digits? @id_number.to_s.gsub(/\D*/, '') == @id_number.to_s end |
#permanent_resident? ⇒ Boolean
73 74 75 |
# File 'lib/za_id_number.rb', line 73 def permanent_resident? !za_citizen? end |
#valid? ⇒ Boolean
19 20 21 22 23 24 25 |
# File 'lib/za_id_number.rb', line 19 def valid? valid_length? && only_digits? && valid_date? && valid_citizenship? && valid_checksum? end |
#valid_checksum? ⇒ Boolean
27 28 29 |
# File 'lib/za_id_number.rb', line 27 def valid_checksum? Luhn.valid? @id_number end |
#valid_citizenship? ⇒ Boolean
43 44 45 |
# File 'lib/za_id_number.rb', line 43 def valid_citizenship? CITIZENSHIP_RANGE.include? @id_number[10].to_i end |
#valid_date? ⇒ Boolean
39 40 41 |
# File 'lib/za_id_number.rb', line 39 def valid_date? date_of_birth ? true : false end |
#valid_length? ⇒ Boolean
31 32 33 |
# File 'lib/za_id_number.rb', line 31 def valid_length? @id_number.length == REQUIRED_ID_LENGTH end |
#za_citizen? ⇒ Boolean
69 70 71 |
# File 'lib/za_id_number.rb', line 69 def za_citizen? @id_number[10].to_i == ZA_CITIZEN end |