za-id-validator 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|