Class: Tsubaki::MyNumber

Inherits:
Object
  • Object
show all
Defined in:
lib/tsubaki/my_number.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(digits, options = {}) ⇒ MyNumber

Returns a new instance of MyNumber.



22
23
24
25
# File 'lib/tsubaki/my_number.rb', line 22

def initialize(digits, options = {})
  @digits = digits.to_s.freeze
  @options = options
end

Class Method Details

.calc_check_digit(digits) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/tsubaki/my_number.rb', line 9

def self.calc_check_digit(digits)
  fail 'must be a 11 digit number' unless digits =~ /\A\d{11}\z/

  arr = digits.chars.map(&:to_i).reverse!
  rem = (1..11).inject(0) do |sum, n|
    pn = arr[n - 1]
    qn = (n <= 6) ? (n + 1) : (n - 5)
    sum + pn * qn
  end % 11

  rem <= 1 ? 0 : (11 - rem)
end

.randObject



3
4
5
6
7
# File 'lib/tsubaki/my_number.rb', line 3

def self.rand
  digits = 11.times.map { Kernel.rand(10) }.join
  check_digit = calc_check_digit(digits)
  "#{digits}#{check_digit}"
end

Instance Method Details

#valid?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/tsubaki/my_number.rb', line 27

def valid?
  @options[:strict] ? valid_check_digit? : valid_pattern?
end

#valid_check_digit?Boolean

Returns:

  • (Boolean)


35
36
37
38
# File 'lib/tsubaki/my_number.rb', line 35

def valid_check_digit?
  return false unless valid_pattern?
  plain_digits[-1].to_i == self.class.calc_check_digit(plain_digits[0, 11]).to_i
end

#valid_pattern?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/tsubaki/my_number.rb', line 31

def valid_pattern?
  !!(plain_digits =~ /\A\d{12}\z/)
end