class Tsubaki::CorporateNumber
Public Class Methods
calc_check_digit(digits)
click to toggle source
# File lib/tsubaki/corporate_number.rb, line 9 def self.calc_check_digit(digits) fail 'must be a 12 digit number' unless digits =~ /\A\d{12}\z/ arr = digits.chars.map(&:to_i).reverse! rem = (1..12).inject(0) do |sum, n| pn = arr[n - 1] qn = n.odd? ? 1 : 2 sum + pn * qn end % 9 9 - rem end
new(digits, options = {})
click to toggle source
# File lib/tsubaki/corporate_number.rb, line 22 def initialize(digits, options = {}) @digits = digits.to_s.freeze @options = options end
rand()
click to toggle source
# File lib/tsubaki/corporate_number.rb, line 3 def self.rand digits = 12.times.map { Kernel.rand(10) }.join check_digit = calc_check_digit(digits) "#{check_digit}#{digits}" end
Public Instance Methods
valid?()
click to toggle source
# File lib/tsubaki/corporate_number.rb, line 27 def valid? @options[:strict] ? valid_check_digit? : valid_pattern? end
valid_check_digit?()
click to toggle source
# File lib/tsubaki/corporate_number.rb, line 35 def valid_check_digit? return false unless valid_pattern? plain_digits[0].to_i == self.class.calc_check_digit(plain_digits[1, 12]).to_i end
valid_pattern?()
click to toggle source
# File lib/tsubaki/corporate_number.rb, line 31 def valid_pattern? !!(plain_digits =~ /\A\d{13}\z/) end
Private Instance Methods
plain_digits()
click to toggle source
# File lib/tsubaki/corporate_number.rb, line 42 def plain_digits @plain_digits ||= @digits.split(@options[:divider]).join('') end