verified 0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTdmYzE3MzUxNzNlNDZlM2NkODE1MjEyZDNjOWU4OTQ5ZDBjMDhjYw==
4
+ NTBlOTVlZGYzZDllNjI0NjU3OTI0OWFkZDY3YzNiYTNjODQyMWVlMg==
5
5
  data.tar.gz: !binary |-
6
- ZWU5ZTA3NTEzZDVkOGU2MDQ4N2IwMDYxNjRjZDJiMzUwMDNhYTkzZQ==
6
+ ODdjMGUyOWEzZTIzNzdlMTQ1MDY3ZWRmYWY3MjE1YzVjMDlhMjhiYQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- Zjg2MzYxZjE5NTAzM2NlNTVkNWIyOGM0NzUzYjE5N2VhYTc3ZjUwZjk2MzE1
10
- ZTM1MjE2MjRiOTk4NzEyMWVhZDZjMTkzZTcyZDg3Y2E5MTQ5MWU0YjMwYmNi
11
- OTA2MGJhZjhiYTA1ZGJkNjM1NjZiMzA0NDg2MTBlMmZkNGFlMGU=
9
+ ZGZlN2JlNWQ4NTk5ODBjZWM5ZDYwMzRmZDc0M2M3MTQ3NGE2ZDk2YzEyNWM0
10
+ N2I2OWY4Njg0N2Y5MzIyN2M4YzZkOWI0MjcxMmFiMThjMGE3YmJjZjQxZTAx
11
+ NGVkMmE0Nzk2YjhhNWY2ZmRiY2I3NDY5NjZmYmUwMGI0NmQyOGU=
12
12
  data.tar.gz: !binary |-
13
- YTk1ZmZjMGNlN2Y1NzMzZWFkNDQ2ZGVjMWVkNzFhZDc0MGY2ZmY5NmVjYTIy
14
- MzJkNjUwNWRlOWYxZjdlZmMyMzNiODg5Y2ZlYjkwNGIyOTRlYWY0YzJmYWZl
15
- NTExMzM3MjBmNGI0ZTJmYjI3YjQyMDAzZjRmMjY1OWJjMWU1M2U=
13
+ MjIyOWU4ZDdkNzJjMjA3Yjk4MmVlNDYzNGMwYWI4ZDE2N2M3ODZiOGQ0ODRm
14
+ Yzg0OGMwNDg2ODY3YThlZDViNDk0ODM2NDdiM2I4MWU2ZDIwYzk0ZThjMDFj
15
+ MTViMTAyYzIzM2E1MjhiMGI3ODI0ZTM2NzAyYTU4ZmI4NWIxNTg=
@@ -1,67 +1,66 @@
1
1
  class Check
2
- def check(mrzLine1, mrzLine2, returnInfo = false)
3
- #make a new digit checker
4
- @@DigitChecker = CheckDigit.new
5
- #string manipulation to simply reading the first line
6
- split1 = mrzLine1.gsub(/<+/, '<').split('<')
7
- #get data unformatted from passport
8
- docData = Hash.new(9)
9
- #first line of MRZ
10
- docData["IssuingState"] = mrzLine1[2...5]
11
- docData["LastName"] = split1[1][3..-1]
12
- docData["FirstNames"] = split1[2..-1]
2
+ def check(mrz_line_1, mrz_line_2)
3
+ #make a new digit checker
4
+ @@digit_checker = CheckDigit.new
5
+ #string manipulation to simply reading the first line
6
+ split = mrz_line_1.gsub(/<+/, '<').split('<')
7
+ #get data unformatted from passport
8
+ doc_data = Hash.new(9)
9
+ #first line of MRZ
10
+ doc_data["IssuingState"] = mrz_line_1[2...5]
11
+ doc_data["LastName"] = split[1][3..-1]
12
+ doc_data["FirstNames"] = split[2..-1]
13
13
 
14
- #second line of MRZ
15
- docData["Number"] = mrzLine2[0...9]
16
- docData["Nationality"] = mrzLine2[10...13]
17
- docData["DateOfBirth"] = mrzLine2[13...19]
18
- docData["Gender"] = mrzLine2[20]
19
- docData["ExpiryDate"] = mrzLine2[21...27]
20
- docData["PersonalNumber"] = mrzLine2[28...42]
14
+ #second line of MRZ
15
+ 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]
21
21
 
22
- #mrz given check digits
23
- docCheck = Array.new
24
- docCheck[0] = mrzLine2[9].to_s
25
- docCheck[1] = mrzLine2[19].to_s
26
- docCheck[2] = mrzLine2[27].to_s
27
- docCheck[3] = mrzLine2[42].to_s
28
- docCheck[4] = mrzLine2[43].to_s
22
+ #mrz given check digits
23
+ doc_check = Array.new
24
+ doc_check[0] = mrz_line_2[9].to_s
25
+ doc_check[1] = mrz_line_2[19].to_s
26
+ doc_check[2] = mrz_line_2[27].to_s
27
+ doc_check[3] = mrz_line_2[42].to_s
28
+ doc_check[4] = mrz_line_2[43].to_s
29
29
 
30
- #calculate our own check digits
31
- ourCheck = Array.new
32
- ourCheck[0] = @@DigitChecker.checkCalc(mrzLine2[0...9])
33
- ourCheck[1] = @@DigitChecker.checkCalc(mrzLine2[13...19])
34
- ourCheck[2] = @@DigitChecker.checkCalc(mrzLine2[21...27])
35
- ourCheck[3] = @@DigitChecker.checkCalc(mrzLine2[28...42])
36
- ourCheck[4] = @@DigitChecker.checkCalc(mrzLine2[0...10]+mrzLine2[13...20]+mrzLine2[21...43])
30
+ #calculate our own check digits
31
+ our_check = Array.new
32
+ our_check[0] = @@digit_checker.check_calc(mrz_line_2[0...9])
33
+ our_check[1] = @@digit_checker.check_calc(mrz_line_2[13...19])
34
+ our_check[2] = @@digit_checker.check_calc(mrz_line_2[21...27])
35
+ our_check[3] = @@digit_checker.check_calc(mrz_line_2[28...42])
36
+ our_check[4] = @@digit_checker.check_calc(mrz_line_2[0...10]+mrz_line_2[13...20]+mrz_line_2[21...43])
37
37
 
38
- #the 4th check digit can be either > or 0, we always return 0 from our CheckDigit calc.
39
- #this basically changes our check to > so the true return can pass
40
- if ourCheck[3] == "0" && docCheck[3] == "<"
41
- ourCheck[3] = "<"
42
- end
43
-
44
- return docData if docCheck.uniq.sort == ourCheck.uniq.sort && returnInfo == true
45
- return true if docCheck.uniq.sort == ourCheck.uniq.sort
46
- return false
47
- end
38
+ #the 4th check digit can be either > or 0, we always return 0 from our CheckDigit calc.
39
+ #this basically changes our check to > so the true return can pass
40
+ if our_check[3] == "0" && doc_check[3] == "<"
41
+ our_check[3] = "<"
42
+ end
43
+
44
+ return doc_data if doc_check.uniq.sort == our_check.uniq.sort
45
+ return false
46
+ end
48
47
  end
49
48
 
50
49
  class Check::CheckDigit
51
- def checkCalc(str)
52
- str = str.strip.upcase
53
- values = str.chars.map do |char|
54
- case char
55
- when '<'
56
- 0
57
- when 'A'..'Z'
58
- char.ord - 65 + 10
59
- when '0'..'9'
60
- char.ord - 48
61
- else
62
- raise "Unexpected character '#{char}'"
63
- end
64
- end
65
- return (values.zip([7,3,1].cycle).map{|(v,w)| v * w}.reduce(:+) % 10).to_s
66
- end
50
+ def check_calc(str)
51
+ str = str.strip.upcase
52
+ values = str.chars.map do |char|
53
+ case char
54
+ when '<'
55
+ 0
56
+ when 'A'..'Z'
57
+ char.ord - 65 + 10
58
+ when '0'..'9'
59
+ char.ord - 48
60
+ else
61
+ raise "Unexpected character '#{char}'"
62
+ end
63
+ end
64
+ return (values.zip([7,3,1].cycle).map{|(v,w)| v * w}.reduce(:+) % 10).to_s
65
+ end
67
66
  end
data/lib/verified.rb CHANGED
@@ -1,7 +1,21 @@
1
- class Verified
2
- def self.check(mrzLine1, mrzLine2, returnData = false)
3
- @@Checker = Check.new
4
- @@Checker.check(mrzLine1, mrzLine2, returnData)
1
+ Verified = Class.new
2
+ class Verified::Passport
3
+ def initialize(mrz_line_1, mrz_line_2)
4
+ checker = Check.new
5
+ @data = checker.check(mrz_line_1, mrz_line_2)
6
+ end
7
+
8
+ def verified?
9
+ return false if @data == false
10
+ return true
11
+ end
12
+
13
+ def method_missing(name, *args, &blk)
14
+ if args.empty? && blk.nil? && @data.has_key?(name.to_s)
15
+ @data[name.to_s]
16
+ else
17
+ super
18
+ end
5
19
  end
6
20
  end
7
21
 
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: '0.1'
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruby
@@ -10,8 +10,8 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2014-08-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: A simple gem to verify MRZ codes on passports. Useful if you need to
14
- comply with KYC or Money Laundering ID checks.
13
+ description: A simple gem to verify and parse MRZ codes on passports. Useful if you
14
+ need to comply with KYC or Money Laundering ID checks.
15
15
  email: ruby@mewmew.io
16
16
  executables: []
17
17
  extensions: []
@@ -19,7 +19,6 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - lib/verified.rb
21
21
  - lib/verified/check.rb
22
- - lib/verified/checkdigit.rb
23
22
  homepage: http://github.com/rubyisilluminati/verified
24
23
  licenses:
25
24
  - MIT
@@ -43,5 +42,5 @@ rubyforge_project:
43
42
  rubygems_version: 2.4.1
44
43
  signing_key:
45
44
  specification_version: 4
46
- summary: Really simple passport verification.
45
+ summary: Really simple passport parsing and verification.
47
46
  test_files: []
@@ -1,18 +0,0 @@
1
- class CheckDigit
2
- def check(str)
3
- str = str.strip.upcase
4
- values = str.chars.map do |char|
5
- case char
6
- when '<'
7
- 0
8
- when 'A'..'Z'
9
- char.ord - 65 + 10
10
- when '0'..'9'
11
- char.ord - 48
12
- else
13
- raise "Unexpected character '#{char}'"
14
- end
15
- end
16
- return (values.zip([7,3,1].cycle).map{|(v,w)| v * w}.reduce(:+) % 10).to_s
17
- end
18
- end