class NumberPlateValidator::SGValidator
Constants
- CHECK_SUM
- MULTIPLIER
Public Class Methods
new()
click to toggle source
# File lib/number_plate_validator/sg_validator.rb, line 6 def initialize @country = "SG" end
Public Instance Methods
get_checksum(letters, numerals)
click to toggle source
# File lib/number_plate_validator/sg_validator.rb, line 22 def get_checksum(letters, numerals) numbers = get_numbers(letters, numerals) get_checksum_from_numbers(numbers) end
get_checksum_from_numbers(numbers)
click to toggle source
# File lib/number_plate_validator/sg_validator.rb, line 43 def get_checksum_from_numbers(numbers) checksum_array = [] numbers.zip(MULTIPLIER) { |x, y| checksum_array << (x * y) } checksum_key = checksum_array.reduce(:+) % 19 CHECK_SUM[checksum_key] end
get_numbers(letters, numerals)
click to toggle source
# File lib/number_plate_validator/sg_validator.rb, line 27 def get_numbers(letters, numerals) numbers = [] letters.split(//).each do |alphebat| numbers << (alphebat.ord - 64) end if numbers.length == 3 numbers = numbers[1,2] elsif numbers.length == 1 numbers = [1] + numbers end numerals = ("000" + numerals)[-4,4] numbers + numerals.split(//).map(&:to_i) end
is_valid?(registration_number)
click to toggle source
Calls superclass method
NumberPlateValidator::CountryValidatorBase#is_valid?
# File lib/number_plate_validator/sg_validator.rb, line 10 def is_valid?(registration_number) return false unless super return false if @license.length > 8 || @license.length < 4 test = /^[A-Z]{1,3}[1-9]{1}\d{0,3}[A-Z]$/ =~ @license return false unless test == 0 letters = @license[/[A-Z]+/] numerals = @license[/\d+/] checksum = get_checksum(letters, numerals) checksum == @license[-1] end