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
# 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