verified 0.1 → 1.0.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.
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