Generating random strings with Ruby

JetThoughts
JTWay
Published in
2 min readJun 6, 2022

--

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)

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

And use it for generating alphanumerical or digital random string.

def alphanumerical_code(length)
(36 ** (length - 1) + rand(36 ** length - 36 ** (length - 1))).to_s(36) # 36 is used here as base we want 10 digits plus 26 letters
end

def digital_code(length)
(10 ** (length - 1) + rand(10 ** length - 10 ** (length - 1))).to_s(10)
end

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"]

Dmitry Tsvetkov is a Software Engineer at JetThoughts. Follow him on LinkedIn or GitHub.

If you enjoyed this story, we recommend reading our latest tech stories and trending tech stories.

--

--