verified 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/verified/check.rb +24 -8
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MzBjMjE3ZmI1ODJiODQzMzA5MzJmNjNlOWE0Yzg0NDNiNTU4NTgzZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZjgyMDg3YzQ2YmFlZjQzYmQzMmQzNWMyNDBmOTU1MTI3M2ExMmFjMQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OWZlZWRmNWJlN2I2NWI0YzJhODlhYThmNjU5ZTFiNTY3OGIzNDQ0NzY5NjEz
|
10
|
+
YzdmYTY4Y2VkMzU0MTVjY2VmMjRlYjU3MTg3ODgxOTA2ZTJlZDdlNzhhMDE2
|
11
|
+
MmRhOTNlNjFlNmQ2MWZkZWQxMjNhOTczMDMyYjgyYThkMTBmYzc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NDQxMjVkNWFkNmM2NDUwMjliYTg3ZjkwYWRlNGYxYzlmNzMxMTFiZDczNGI0
|
14
|
+
MWE0ZDczOGUxODQ4NjNlNmVhMGRiODFlMzk4NGYxYTQ3ODJlY2JlYTE2MDZh
|
15
|
+
Zjk3MDk5ZDE1NGU0NjU2YzE0MzVmZDRjYWY5MTA3YjMxNjVhYjQ=
|
data/lib/verified/check.rb
CHANGED
@@ -2,22 +2,23 @@ class Check
|
|
2
2
|
def check(mrz_line_1, mrz_line_2)
|
3
3
|
#make a new digit checker
|
4
4
|
@@digit_checker = CheckDigit.new
|
5
|
+
@@date_converter = YYDate.new
|
5
6
|
#string manipulation to simply reading the first line
|
6
|
-
split = mrz_line_1.
|
7
|
+
split = mrz_line_1.split(/<+/)
|
7
8
|
#get data unformatted from passport
|
8
9
|
doc_data = Hash.new(9)
|
9
10
|
#first line of MRZ
|
10
|
-
doc_data["IssuingState"] = mrz_line_1[2...5]
|
11
|
+
doc_data["IssuingState"] = mrz_line_1[2...5].sub(/<+/, '')
|
11
12
|
doc_data["LastName"] = split[1][3..-1]
|
12
13
|
doc_data["FirstNames"] = split[2..-1]
|
13
14
|
|
14
15
|
#second line of MRZ
|
15
16
|
doc_data["Number"] = mrz_line_2[0...9]
|
16
|
-
doc_data["Nationality"] = mrz_line_2[10...13]
|
17
|
-
doc_data["DateOfBirth"] = mrz_line_2[13...19]
|
18
|
-
doc_data["Gender"] = mrz_line_2[20]
|
19
|
-
doc_data["ExpiryDate"] = mrz_line_2[21...27]
|
20
|
-
doc_data["PersonalNumber"] = mrz_line_2[28...42]
|
17
|
+
doc_data["Nationality"] = mrz_line_2[10...13].sub(/<+/, '')
|
18
|
+
doc_data["DateOfBirth"] = @@date_converter.convert_to_date(mrz_line_2[13...19])
|
19
|
+
doc_data["Gender"] = mrz_line_2[20].sub(/<+/, '')
|
20
|
+
doc_data["ExpiryDate"] = @@date_converter.convert_to_date(mrz_line_2[21...27])
|
21
|
+
doc_data["PersonalNumber"] = mrz_line_2[28...42].sub(/<+/, '')
|
21
22
|
|
22
23
|
#mrz given check digits
|
23
24
|
doc_check = Array.new
|
@@ -63,4 +64,19 @@ class Check::CheckDigit
|
|
63
64
|
end
|
64
65
|
return (values.zip([7,3,1].cycle).map{|(v,w)| v * w}.reduce(:+) % 10).to_s
|
65
66
|
end
|
66
|
-
end
|
67
|
+
end
|
68
|
+
|
69
|
+
class Check::YYDate
|
70
|
+
def convert_to_date(input_date)
|
71
|
+
#yymmdd has the flaw of not knowing which century
|
72
|
+
#uses current year as a cut off to make an accurate prediction
|
73
|
+
current_year_yy = (Date.today.strftime("%Y"))[2..4]
|
74
|
+
input_year_yy = input_date[0..1]
|
75
|
+
input_month = input_date[2..3]
|
76
|
+
input_day = input_date[4..5]
|
77
|
+
return Date.parse(input_day+"-"+input_month+"-"+"19"+input_year_yy) if input_year_yy >= current_year_yy
|
78
|
+
return Date.parse(input_day+"-"+input_month+"-"+"20"+input_year_yy)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
require 'date'
|