class VinUtils::Validator
Constants
- DIGIT_BASE
- MAP
- WEIGHTS
Attributes
vin[RW]
Public Class Methods
new(vin)
click to toggle source
# File lib/vin_utils/validator.rb, line 9 def initialize(vin) @vin = vin @vin = @vin.upcase if @vin.instance_of?(String) end
Public Instance Methods
calculate_check_digit()
click to toggle source
# File lib/vin_utils/validator.rb, line 20 def calculate_check_digit return :invalid unless valid_input? sum = 0 @vin.chars.each_with_index do |char, i| sum += transliterate(char) * WEIGHTS[i] end MAP[sum % 11] end
suggest_valid_vin()
click to toggle source
# File lib/vin_utils/validator.rb, line 31 def suggest_valid_vin return :invalid unless valid_input? return @vin if valid? new_vin = @vin.dup new_vin[8] = calculate_check_digit new_vin end
valid?()
click to toggle source
# File lib/vin_utils/validator.rb, line 14 def valid? return false unless valid_input? calculate_check_digit == @vin[8] end
Private Instance Methods
transliterate(char)
click to toggle source
# File lib/vin_utils/validator.rb, line 42 def transliterate(char) DIGIT_BASE.index(char) % 10 end
valid_input?()
click to toggle source
# File lib/vin_utils/validator.rb, line 46 def valid_input? return false unless @vin.instance_of?(String) return false if @vin.chars.size != 17 @vin.chars.all? do |char| DIGIT_BASE.include?(char) && char != '.' end end