【问题标题】:Ruby: How to generate strings of variable bits length with only alphanumeric characters?Ruby:如何仅使用字母数字字符生成可变位长度的字符串?
【发布时间】:2020-10-22 05:36:55
【问题描述】:

我正在尝试使用 Ruby 解决以下问题:

我需要生成具有可变位长度且仅包含字母数字字符的字符串。

这是我所拥有的already found

Digest::SHA2.new(bitlen = 256).to_s
# => "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"

它完全符合我的需要,但它只接受 256、384 和 512 作为 bitlen

有人知道有什么替代方案吗?

提前致谢。

更新

  1. One byte = collection of 8 bits
  2. 根据String#bytesize,每个alphanumeric character占用1个字节。
('a'..'z').chain('A'..'Z').chain('0'..'9').map(&:bytesize).uniq
# => [1]
  1. 基于上述事实,我们可以假设

    • SecureRandom.alphanumeric(1) 生成一个 8 位长度的字母数字字符串。
    • SecureRandom.alphanumeric(2) 生成一个 16 位长度的字母数字字符串。
    • SecureRandom.alphanumeric(3) 生成一个 24 位长度的字母数字字符串。
    • 等等……
  2. 因此,@anothermh's answer 可以被视为可接受的解决方案。

【问题讨论】:

    标签: ruby string bit variable-length


    【解决方案1】:

    使用SecureRandom

    首先,确保您需要它:

    require 'securerandom'
    

    然后就可以生成值了:

    SecureRandom.alphanumeric(10)
    => "hxYolwzk0P"
    

    10 更改为您需要的任何长度。

    值得指出的是,您使用的示例返回的不是字母数字而是十六进制值。如果您特别需要十六进制,那么您可以使用:

    SecureRandom.hex(10)
    => "470eb1d8daebacd20920"
    

    【讨论】:

    • 感谢您的回答。您能否提供指向SecureRandom.alphanumeric 文档的链接。我想确定它接受位长作为参数。
    • SecureRandomRandom::Formatter 扩展,提供方法:docs.ruby-lang.org/en/2.7.0/Random/…alphanumeric 是字符串长度,hex 是位长度。
    • @Marian13 这个答案是否为您提供了所需的解决方案?
    • @ anothermh 是的,谢谢。您的回答帮助我找到了可接受的解决方案。
    • 太好了,很高兴听到它!
    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 2012-09-29
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多