turkish_id 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/console +0 -0
- data/lib/turkish_id/version.rb +1 -1
- data/lib/turkish_id.rb +53 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4dafdcdcde5e33445080ae67b280d26f0929eb9f
|
4
|
+
data.tar.gz: 4811796cd5e291b56f1fd59e2ad53342ea948ae3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ace44efda6e9e1593e5b2fe5afbd570fb516bd541fc84f7e4788daf433db83b7a7685891523a2d313ac7f19f308bbba67952b5db634aa5d8b50c5a79bd70d164
|
7
|
+
data.tar.gz: 141d58cad8451777e9c29c26ec5e12ba4a1bde085ede9b6a6ad9437c0ccf21f49cc8c720943bd530d9eec9d0538538a0fc215f80f16e106bf955522b9d88f236
|
data/bin/console
CHANGED
File without changes
|
data/lib/turkish_id/version.rb
CHANGED
data/lib/turkish_id.rb
CHANGED
@@ -1,33 +1,78 @@
|
|
1
1
|
require "turkish_id/version"
|
2
2
|
|
3
|
+
class String
|
4
|
+
def digitize
|
5
|
+
self.split('').map { |s| Integer(s) }
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
3
9
|
class TurkishId
|
4
10
|
|
5
11
|
def initialize(id_number)
|
6
12
|
begin
|
7
|
-
# Convert string into array of integers
|
8
|
-
@id_number = id_number.split('').map { |s| Integer(s) }
|
13
|
+
@id_number = id_number.digitize # Convert string into array of integers
|
9
14
|
rescue
|
10
15
|
@id_number = '' # Suppress error & return false (eventually)
|
11
16
|
end
|
12
17
|
end
|
13
18
|
|
19
|
+
|
20
|
+
def core
|
21
|
+
@id_number.take(9)
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def self.get_checksum(id_core)
|
26
|
+
|
27
|
+
# Calculate the sums of odd and even digits
|
28
|
+
odds = id_core.values_at(0, 2, 4, 6, 8).reduce(:+)
|
29
|
+
evens = id_core.values_at(1, 3, 5, 7).reduce(:+)
|
30
|
+
|
31
|
+
# Generate checksum digits
|
32
|
+
d10 = ((odds * 7) - evens) % 10
|
33
|
+
d11 = (id_core.reduce(:+) + d10) % 10
|
34
|
+
|
35
|
+
[d10, d11]
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.add_checksum(id_core)
|
39
|
+
id_core + TurkishId.get_checksum(id_core)
|
40
|
+
end
|
41
|
+
|
14
42
|
def is_valid?
|
15
43
|
id = @id_number # +1 brevity point
|
16
44
|
|
17
45
|
# Early elimination, bad length or first digit
|
18
46
|
return false if id.length != 11 || id.first == 0
|
19
47
|
|
20
|
-
#
|
21
|
-
|
22
|
-
evens = id.values_at(1, 3, 5, 7).reduce(:+)
|
48
|
+
# Get checksum digits
|
49
|
+
d10, d11 = TurkishId.get_checksum(id)
|
23
50
|
|
24
51
|
# Check if the tenth digit matches the algorithm
|
25
|
-
return false if id[9] !=
|
52
|
+
return false if id[9] != d10
|
26
53
|
|
27
54
|
# Check if the eleventh digit matches the algorithm
|
28
|
-
return false if id[10] !=
|
55
|
+
return false if id[10] != d11
|
56
|
+
|
57
|
+
true # All conditions met
|
58
|
+
end
|
59
|
+
|
60
|
+
def get_relatives(num, direction='up')
|
61
|
+
|
62
|
+
id = self.core.join.to_i # Our core id as integer
|
63
|
+
|
64
|
+
tree = {'up' => 1, 'down' => -1} # + or - based on direction
|
65
|
+
magic = 131 * 229 * tree[direction] # Eliminates if statement
|
66
|
+
|
67
|
+
relatives = []
|
68
|
+
|
69
|
+
num.times do
|
70
|
+
id += magic # Gives us the next relative
|
71
|
+
relatives << id # Collecting ids in an array
|
72
|
+
end
|
29
73
|
|
30
|
-
|
74
|
+
# Traverse relatives and append checksum digits
|
75
|
+
relatives.map { |r| TurkishId.add_checksum(r.to_s.digitize).join }
|
31
76
|
end
|
32
77
|
|
33
78
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turkish_id
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kerem Bozdas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|