Ruby로 임의의 문자열 생성

6048 단어 rubywebdev
ruby에서 지정된 길이의 임의의 영숫자 문자열을 생성해야 하는 경우 몇 가지 옵션이 있습니다.

Ruby 버전 >= 2.5를 사용하는 경우 다음과 같이 간단하게 갈 수 있습니다.

SecureRandom.alphanumeric(length)


이전 버전의 경우 약간의 숫자 변환 해킹을 활용할 수 있습니다. Integer#to_s 메서드는 기준을 나타내는 인수를 허용합니다.
예를 들어:

13.to_s(2)  # => "1101" in binary
13.to_s(16) # => "d" in hex



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


더 많은 맞춤형 생성기



더 구체적이고 더 많은 제어가 필요한 경우 자체 생성기를 만들 수 있습니다.
인쇄 매체에서 고객이 문자열을 더 쉽게 구분할 수 있도록 일부 문자를 제외하는 임의의 영숫자 문자열 생성기가 필요하다고 가정해 보겠습니다.

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

좋은 웹페이지 즐겨찾기