verified 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +8 -8
  2. data/lib/verified/check.rb +24 -8
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NTBlOTVlZGYzZDllNjI0NjU3OTI0OWFkZDY3YzNiYTNjODQyMWVlMg==
4
+ MzBjMjE3ZmI1ODJiODQzMzA5MzJmNjNlOWE0Yzg0NDNiNTU4NTgzZQ==
5
5
  data.tar.gz: !binary |-
6
- ODdjMGUyOWEzZTIzNzdlMTQ1MDY3ZWRmYWY3MjE1YzVjMDlhMjhiYQ==
6
+ ZjgyMDg3YzQ2YmFlZjQzYmQzMmQzNWMyNDBmOTU1MTI3M2ExMmFjMQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZGZlN2JlNWQ4NTk5ODBjZWM5ZDYwMzRmZDc0M2M3MTQ3NGE2ZDk2YzEyNWM0
10
- N2I2OWY4Njg0N2Y5MzIyN2M4YzZkOWI0MjcxMmFiMThjMGE3YmJjZjQxZTAx
11
- NGVkMmE0Nzk2YjhhNWY2ZmRiY2I3NDY5NjZmYmUwMGI0NmQyOGU=
9
+ OWZlZWRmNWJlN2I2NWI0YzJhODlhYThmNjU5ZTFiNTY3OGIzNDQ0NzY5NjEz
10
+ YzdmYTY4Y2VkMzU0MTVjY2VmMjRlYjU3MTg3ODgxOTA2ZTJlZDdlNzhhMDE2
11
+ MmRhOTNlNjFlNmQ2MWZkZWQxMjNhOTczMDMyYjgyYThkMTBmYzc=
12
12
  data.tar.gz: !binary |-
13
- MjIyOWU4ZDdkNzJjMjA3Yjk4MmVlNDYzNGMwYWI4ZDE2N2M3ODZiOGQ0ODRm
14
- Yzg0OGMwNDg2ODY3YThlZDViNDk0ODM2NDdiM2I4MWU2ZDIwYzk0ZThjMDFj
15
- MTViMTAyYzIzM2E1MjhiMGI3ODI0ZTM2NzAyYTU4ZmI4NWIxNTg=
13
+ NDQxMjVkNWFkNmM2NDUwMjliYTg3ZjkwYWRlNGYxYzlmNzMxMTFiZDczNGI0
14
+ MWE0ZDczOGUxODQ4NjNlNmVhMGRiODFlMzk4NGYxYTQ3ODJlY2JlYTE2MDZh
15
+ Zjk3MDk5ZDE1NGU0NjU2YzE0MzVmZDRjYWY5MTA3YjMxNjVhYjQ=
@@ -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.gsub(/<+/, '<').split('<')
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'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: verified
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruby