verified 1.0.0 → 1.1.0

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.
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