How to generate an 8 digits random number in Ruby

1 Answer

0 votes
require 'securerandom'

# Module providing cryptographically secure 8-digit number and code generators.
module RandomCodeGenerator
  MIN_INTEGER = 10_000_000
  MAX_INTEGER = 99_999_999

  module_function

  # Generates a random 8-digit positive integer between 10,000,000 and 99,999,999 (inclusive).
  # Guaranteed to start with a non-zero digit (1-9).
  #
  # @return [Integer] An 8-digit positive integer.
  def generate_8_digit_number
    # SecureRandom.random_number(range) accepts a Range object and handles inclusive bounds natively
    SecureRandom.random_number(MIN_INTEGER..MAX_INTEGER)
  end

  # Generates an 8-character numeric string code between "00000000" and "99999999".
  # Preserves leading zeros, making it suitable for OTPs, PINs, or verification tokens.
  #
  # @return [String] An 8-character numeric string padded with leading zeros if necessary.
  def generate_8_digit_code
    # SecureRandom.random_number(n) returns an integer in the range [0, n - 1]
    raw_value = SecureRandom.random_number(100_000_000)

    # Kernel#sprintf or String#% formats the integer with 8 digits and leading zeros (%08d)
    format('%08d', raw_value)
  end
end

# ==========================================
# Example Execution & Usage
# ==========================================

if __FILE__ == $PROGRAM_NAME
  puts '=== Generating 8-Digit Integers [10000000 to 99999999] ==='
  3.times do
    number = RandomCodeGenerator.generate_8_digit_number
    puts "Generated integer: #{number}"
  end

  puts "\n=== Generating 8-Digit String Codes [00000000 to 99999999] ==="
  3.times do
    code = RandomCodeGenerator.generate_8_digit_code
    puts "Generated OTP code: #{code}"
  end
end


# run:
#
# === Generating 8-Digit Integers [10000000 to 99999999] ===
# Generated integer: 58343688
# Generated integer: 18510048
# Generated integer: 49900293
# 
# === Generating 8-Digit String Codes [00000000 to 99999999] ===
# Generated OTP code: 87737505
# Generated OTP code: 24294425
# Generated OTP code: 83647461
# 

 



answered Oct 2 by avibootz
...