class ImeiValidator

Checks if the value of an attribute is a valid IMEI number.

@example Validate that a device IMEI number is valid.

class Device << ActiveRecord::Base
  attr_accessor :imei
  validates :imei, imei: true
end

Constants

IMEI_FORMAT

356843052637512 or 35-6843052-637512 or 35.6843052.637512

Private Instance Methods

valid?(imei, _) click to toggle source
# File lib/missing_validators/validators/imei_validator.rb, line 34
def valid?(imei, _)
  validate_format(imei.to_s) && \
    validate_luhn_checksum(imei.to_s.gsub(/\D/, '').reverse)
end
validate_format(imei_number) click to toggle source
# File lib/missing_validators/validators/imei_validator.rb, line 14
def validate_format(imei_number)
  (imei_number =~ IMEI_FORMAT).present?
end
validate_luhn_checksum(numbers) click to toggle source
# File lib/missing_validators/validators/imei_validator.rb, line 18
def validate_luhn_checksum(numbers)
  sum = 0
  i = 0

  numbers.each_char do |ch|
    n = ch.to_i
    n *= 2 if i.odd?
    n = 1 + (n - 10) if n >= 10

    sum += n
    i += 1
  end

  (sum % 10).zero?
end