DEV Community

Cover image for Generating random strings with Ruby
JetThoughts Dev for JetThoughts

Posted on • Edited on • Originally published at jetthoughts.com

Generating random strings with Ruby

When you need to generate a random alphanumeric string of a specified length in ruby you have a couple of options.

If you are using Ruby version >= 2.5 you can simply go with:

SecureRandom.alphanumeric(length)
Enter fullscreen mode Exit fullscreen mode

For older versions you can utilize a little numeric convertion hack: Integer#to_s method accepts an argument representing the base.
For example:

13.to_s(2)  # => "1101" in binary
13.to_s(16) # => "d" in hex
Enter fullscreen mode Exit fullscreen mode
def alphanumerical_code(length)
  # 36 is used here as base: we want 10 digits plus 26 letters
  (36 ** (length - 1) + rand(36 ** length - 36 ** (length - 1))).to_s(36) 
end

def digital_code(length)
  (10 ** (length - 1) + rand(10 ** length - 10 ** (length - 1))).to_s(10)
end
Enter fullscreen mode Exit fullscreen mode

More custom generator

In case if you need to build something more specific and have more control, you can create your own generator.
Let's say we need a random alphanumeric string generator, which excludes some of the letters, so the strings are more easily distinguished by customer in printed media.

class Generator
  CHARSET = [('0'..'9'), ('a'..'z'), ('A'..'Z')]

  def initialize(length:, exceptions: [])
    @length = length
    @allowed_charset = CHARSET.flat_map(&:to_a) - exceptions
  end

  def perform
    (0...@length)
      .map { @allowed_charset[rand(@allowed_charset.size)] }
      .join
  end
end

generator = Generator.new(
  length: 10, 
  exceptions: ['1', 'I', 'l', '0', 'o', 'O']
)
generator.perform
(1..3).map { better_generator.perform } 
# => ["FXCpz9evUj", "JP3uGhF35i", "rP4wv8Q5rm"]

Enter fullscreen mode Exit fullscreen mode

Top comments (0)