za_id_number 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1091207c4bf7fe86f9dd8eff09d907439d0c77d13596ce394145b958c487ca65
4
- data.tar.gz: '08fbe6e7a50f19a8a3d395b66f2e49e1883728387d47c52cf8ff8da4fdaba4fc'
3
+ metadata.gz: dd9d77d348b60523b50eb007e2f7d615b41e01291c8152427fc9aed33bbb9f97
4
+ data.tar.gz: 8f1edc87848ff3788b4039ca2f3492e133fac871a9237ced4bd99d6654638a2e
5
5
  SHA512:
6
- metadata.gz: 650958c1b3305ad083b7b9ff0da547be34c292777c93635799e7bbdc04751fd74cd719761707832e4ea6d0d1d133dd5f2b887da9d21c5f201e8d6afc6b232d4c
7
- data.tar.gz: d226d05b02865243ae604849da00669224b75984cd623947e54c97482fe0318157a490d0b65754e92dd49abdfbc69dee28239bfe01e0134526e262f903dfe672
6
+ metadata.gz: eada6d8d9ef2b92ab1237946123821d49ddabe6ce0131133f7253b1c355c791e8d822b5e495be8266a903d0a00c77b7a8164ccacf8da46b47643283827aa6be2
7
+ data.tar.gz: eb5a7a4b1cfdcd9e97ce0637df59c7799d927b20c96b5033b95663f8a4c775d04aad1228346e977cb6c5940e1f65dac6ae90fa0c8cefa201d218a3c4bd6858ea
data/CHANGES CHANGED
@@ -9,6 +9,12 @@ and this project tries really hard to adhere to [Semantic Versioning](https://se
9
9
 
10
10
  Nothing
11
11
 
12
+ ## [2.2.0] - 2023-04-05
13
+
14
+ ### Added
15
+
16
+ - Support for [ID numbers where the citizen is a refugee.](https://www.oecd.org/tax/automatic-exchange/crs-implementation-and-assistance/tax-identification-numbers/South-Africa-TIN.pdf)
17
+
12
18
  ## [2.1.0] - 2022-05-31
13
19
 
14
20
  ### Added
data/README.md CHANGED
@@ -12,7 +12,7 @@ A South African ID number is a 13-digit number which is defined by the following
12
12
 
13
13
  - The first 6 digits (`YYMMDD`) are based on your date of birth. **20 February 1992** is displayed as `920220`.
14
14
  - The next 4 digits (`SSSS`) are used to define your gender. Females are assigned numbers in the range 0000-4999 and males from 5000-9999.
15
- - The next digit (`C`) shows if you're a ZA citizen status, with 0 denoting that you were born a ZA citizen and 1 denoting that you're a permanent resident.
15
+ - The next digit (`C`) shows if you're a ZA citizen status, with 0 denoting that you were born a ZA citizen, 1 denoting that you're a permanent resident and 2 denoting that you're a refugee.
16
16
  - The last digit (`Z`) is a checksum digit – used to check that the number sequence is accurate using a set formula called the [Luhn algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm).
17
17
 
18
18
  The graphic below details the different sections of an ID number, based on the fictitious sequence `9202204720082`
@@ -77,6 +77,7 @@ id_num.male? # => false
77
77
  id_num.citizenship # => :za_citizen
78
78
  id_num.za_citizen? # => true
79
79
  id_num.permanent_resident? # => false
80
+ id_num.refugee? # => false
80
81
  ```
81
82
 
82
83
  Development
@@ -1,5 +1,5 @@
1
1
  class ZAIDNumber
2
2
  class Version
3
- VERSION = '2.1.0'
3
+ VERSION = '2.2.0'
4
4
  end
5
5
  end
data/lib/za_id_number.rb CHANGED
@@ -8,9 +8,10 @@ class ZAIDNumber
8
8
  REQUIRED_ID_LENGTH = 13
9
9
  FEMALE_RANGE = (0..4999)
10
10
  MALE_RANGE = (5000..9999)
11
- CITIZENSHIP_RANGE = (0..1)
11
+ CITIZENSHIP_RANGE = (0..2)
12
12
  ZA_CITIZEN = 0
13
13
  PERMANENT_RESIDENT = 1
14
+ REFUGEE = 2
14
15
 
15
16
  attr_reader :id_number
16
17
  alias to_s id_number
@@ -44,7 +45,7 @@ class ZAIDNumber
44
45
  end
45
46
 
46
47
  def valid_citizenship?
47
- CITIZENSHIP_RANGE.include? @id_number[10].to_i
48
+ CITIZENSHIP_RANGE.include? citizenship_status
48
49
  end
49
50
 
50
51
  def date_of_birth
@@ -66,17 +67,25 @@ class ZAIDNumber
66
67
  end
67
68
 
68
69
  def citizenship
69
- za_citizen? ? :za_citizen : :permanent_resident
70
+ case citizenship_status
71
+ when ZA_CITIZEN then :za_citizen
72
+ when PERMANENT_RESIDENT then :permanent_resident
73
+ when REFUGEE then :refugee
74
+ end
70
75
  end
71
76
 
72
77
  def za_citizen?
73
- @id_number[10].to_i == ZA_CITIZEN
78
+ citizenship_status == ZA_CITIZEN
74
79
  end
75
80
 
76
81
  def permanent_resident?
77
82
  !za_citizen?
78
83
  end
79
84
 
85
+ def refugee?
86
+ citizenship_status == REFUGEE
87
+ end
88
+
80
89
  def ==(other)
81
90
  return false unless other.is_a?(ZAIDNumber)
82
91
 
@@ -87,4 +96,10 @@ class ZAIDNumber
87
96
  def hash
88
97
  id_number.hash
89
98
  end
99
+
100
+ private
101
+
102
+ def citizenship_status
103
+ @id_number[10].to_i
104
+ end
90
105
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: za_id_number
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Fortuna
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-05-31 00:00:00.000000000 Z
11
+ date: 2023-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler