za-id-validator 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/za-id-validator.rb +23 -19
- data/test/test_za-id-validator.rb +34 -2
- data/za-id-validator.gemspec +1 -1
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/lib/za-id-validator.rb
CHANGED
@@ -1,31 +1,35 @@
|
|
1
1
|
module ZaIdValidator
|
2
2
|
|
3
3
|
def valid_za_identity_number?(id)
|
4
|
-
|
4
|
+
id = id.to_s # force to a string
|
5
|
+
return false unless length_is_valid?(id)
|
6
|
+
id.chars.to_a.last.to_i == z(id)
|
5
7
|
end
|
6
8
|
|
7
|
-
|
8
|
-
id =~ /^\d{13}$/
|
9
|
-
end
|
9
|
+
private
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
def length_is_valid?(id)
|
12
|
+
id =~ /^\d{13}$/
|
13
|
+
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
def a(id)
|
16
|
+
id.chars.to_a.values_at(0,2,4,6,8,10).inject(0) { |sum, v| sum += v.to_i }
|
17
|
+
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
def b(id)
|
20
|
+
id.chars.to_a.values_at(1,3,5,7,9,11).join
|
21
|
+
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
def c(id)
|
24
|
+
(b(id).to_i * 2).to_s.chars.to_a.inject(0) { |sum, v| sum += v.to_i }
|
25
|
+
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
def d(id)
|
28
|
+
a(id) + c(id)
|
29
|
+
end
|
30
|
+
|
31
|
+
def z(id)
|
32
|
+
10 - (d(id) % 10)
|
33
|
+
end
|
30
34
|
|
31
35
|
end
|
@@ -11,6 +11,7 @@ class TestZaIdValidator < Test::Unit::TestCase
|
|
11
11
|
|
12
12
|
setup do
|
13
13
|
@valid = "8001015009087"
|
14
|
+
@valid_integer = 8001015009087
|
14
15
|
end
|
15
16
|
|
16
17
|
should "be the correct length" do
|
@@ -38,7 +39,15 @@ class TestZaIdValidator < Test::Unit::TestCase
|
|
38
39
|
end
|
39
40
|
|
40
41
|
should "be a valid ID number" do
|
41
|
-
|
42
|
+
result = valid_za_identity_number?(@valid)
|
43
|
+
assert_not_nil(result)
|
44
|
+
assert(result)
|
45
|
+
end
|
46
|
+
|
47
|
+
should "be a valid ID number (when passed as an int)" do
|
48
|
+
result = valid_za_identity_number?(@valid_integer)
|
49
|
+
assert_not_nil(result)
|
50
|
+
assert(result)
|
42
51
|
end
|
43
52
|
|
44
53
|
end
|
@@ -50,7 +59,30 @@ class TestZaIdValidator < Test::Unit::TestCase
|
|
50
59
|
end
|
51
60
|
|
52
61
|
should "not be a valid ID number" do
|
53
|
-
|
62
|
+
result = valid_za_identity_number?(@invalid)
|
63
|
+
assert_not_nil(result)
|
64
|
+
assert(!result)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
context "an ID number that is too long" do
|
70
|
+
|
71
|
+
setup do
|
72
|
+
@too_long = "80010150090871"
|
73
|
+
@too_long_integer = 80010150090871
|
74
|
+
end
|
75
|
+
|
76
|
+
should "not be a valid ID number" do
|
77
|
+
result = valid_za_identity_number?(@too_long)
|
78
|
+
assert_not_nil(result)
|
79
|
+
assert(!result)
|
80
|
+
end
|
81
|
+
|
82
|
+
should "not be a valid ID number (when passed as an int)" do
|
83
|
+
result = valid_za_identity_number?(@too_long_integer)
|
84
|
+
assert_not_nil(result)
|
85
|
+
assert(!result)
|
54
86
|
end
|
55
87
|
|
56
88
|
end
|
data/za-id-validator.gemspec
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: za-id-validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Craig Paterson
|