Class: Tsubaki::MyNumber
- Inherits:
-
Object
- Object
- Tsubaki::MyNumber
- Defined in:
- lib/tsubaki/my_number.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(digits, options = {}) ⇒ MyNumber
constructor
A new instance of MyNumber.
- #valid? ⇒ Boolean
- #valid_check_digit? ⇒ Boolean
- #valid_pattern? ⇒ Boolean
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, = {}) @digits = digits.to_s.freeze @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 |
.rand ⇒ Object
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
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
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
31 32 33 |
# File 'lib/tsubaki/my_number.rb', line 31 def valid_pattern? !!(plain_digits =~ /\A\d{12}\z/) end |