Class: Check
- Inherits:
-
Object
- Object
- Check
- Defined in:
- lib/verified/check.rb
Defined Under Namespace
Classes: CheckDigit, YYDate
Instance Method Summary collapse
Instance Method Details
#check(mrz_line_1, mrz_line_2) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/verified/check.rb', line 4 def check(mrz_line_1, mrz_line_2) #make a new digit checker @@digit_checker = CheckDigit.new @@date_converter = YYDate.new #string manipulation to simply reading the first line split = mrz_line_1.split(/<+/) #get data unformatted from passport doc_data = Hash.new(9) #first line of MRZ doc_data["IssuingState"] = mrz_line_1[2...5].sub(/<+/, '') doc_data["LastName"] = split[1][3..-1] doc_data["FirstNames"] = split[2..-1] #second line of MRZ doc_data["Number"] = mrz_line_2[0...9] doc_data["Nationality"] = mrz_line_2[10...13].sub(/<+/, '') doc_data["DateOfBirth"] = @@date_converter.convert_to_date(mrz_line_2[13...19]) doc_data["Gender"] = mrz_line_2[20].sub(/<+/, '') doc_data["ExpiryDate"] = @@date_converter.convert_to_date(mrz_line_2[21...27]) doc_data["PersonalNumber"] = mrz_line_2[28...42].sub(/<+/, '') #mrz given check digits doc_check = Array.new doc_check[0] = mrz_line_2[9].to_s doc_check[1] = mrz_line_2[19].to_s doc_check[2] = mrz_line_2[27].to_s doc_check[3] = mrz_line_2[42].to_s doc_check[4] = mrz_line_2[43].to_s #calculate our own check digits our_check = Array.new our_check[0] = @@digit_checker.check_calc(mrz_line_2[0...9]) our_check[1] = @@digit_checker.check_calc(mrz_line_2[13...19]) our_check[2] = @@digit_checker.check_calc(mrz_line_2[21...27]) our_check[3] = @@digit_checker.check_calc(mrz_line_2[28...42]) our_check[4] = @@digit_checker.check_calc(mrz_line_2[0...10]+mrz_line_2[13...20]+mrz_line_2[21...43]) #the 4th check digit can be either > or 0, we always return 0 from our CheckDigit calc. #this basically changes our check to > so the true return can pass if our_check[3] == "0" && doc_check[3] == "<" our_check[3] = "<" end return doc_data if doc_check.uniq.sort == our_check.uniq.sort return false end |