Class: Identification::Parser::DVLA

Inherits:
Identification::Parser show all
Defined in:
lib/identification/parser/dvla.rb

Overview

Represents a DVLA parser.

Class Method Summary collapse

Class Method Details

.parse(driver_number) ⇒ Object



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
# File 'lib/identification/parser/dvla.rb', line 9

def self.parse(driver_number)
  # Remove whitespace
  driver_number.gsub!(/\s+/, '')

  return { validity: false } if driver_number.length != 18 && driver_number.length != 16

  doc_data = Hash.new(6)

  # Document will be valid unless an error occurs.
  doc_data[:validity] = true

  # Document may not be valid, but still, continue parsing.
  doc_data[:validity] = false unless dvla_check_line_checksum(driver_number)

  doc_data[:last_name] = driver_number[0...5].sub(/9+/, '')

  doc_data[:first_initials] = driver_number[11...13].sub(/9+/, '')

  if driver_number.length == 18
    doc_data[:license_numbers] = driver_number[16...18]
  else
    doc_data[:license_numbers] = '00'
  end      

  doc_data[:date_of_birth] = yymmdd_to_ruby_date(driver_number[5...11])

  if driver_number[6] == '5' || driver_number == '6'
    doc_data[:gender] = 'F'
  else
    doc_data[:gender] = 'M'
  end

  # In case of an invalid date...
  doc_data[:validity] = false if doc_data[:date_of_birth] == false

  return doc_data
end

.yymmdd_to_ruby_date(input_date) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/identification/parser/dvla.rb', line 47

def self.yymmdd_to_ruby_date(input_date)
  # Change the month back (if gender is set to F)
  input_date[1] = '0' if input_date[1] == '5'
  input_date[1] = '1' if input_date[1] == '6'

  # Put to YYMMDD format
  new_date = String.new(input_date)
  new_date[1] = input_date[5]
  new_date[2] = input_date[1]
  new_date[3] = input_date[2]
  new_date[4] = input_date[3]
  new_date[5] = input_date[4]
  super(new_date) 
end