我目前正在为“A”生成一个8字符伪随机大写字符串。。“Z”:
value = ""; 8.times{value << (65 + rand(25)).chr}
但它看起来不干净,而且不能作为参数传递,因为它不是一个单独的语句。要获取混合大小写字符串“a”。。“z”加“A”。。“Z”,我将其更改为:
value = ""; 8.times{value << ((rand(2)==1?65:97) + rand(25)).chr}
但它看起来像垃圾。
有人有更好的方法吗?
我目前正在为“A”生成一个8字符伪随机大写字符串。。“Z”:
value = ""; 8.times{value << (65 + rand(25)).chr}
但它看起来不干净,而且不能作为参数传递,因为它不是一个单独的语句。要获取混合大小写字符串“a”。。“z”加“A”。。“Z”,我将其更改为:
value = ""; 8.times{value << ((rand(2)==1?65:97) + rand(25)).chr}
但它看起来像垃圾。
有人有更好的方法吗?
当前回答
这几乎是丑陋的,但也许是朝着正确的方向迈出的一步?
(1..8).map{|i| ('a'..'z').to_a[rand(26)]}.join
其他回答
require 'sha1'
srand
seed = "--#{rand(10000)}--#{Time.now}--"
Digest::SHA1.hexdigest(seed)[0,8]
[*('A'..'Z')].sample(8).join
生成随机8个字母的字符串(例如NVAYXHGR)
([*('A'..'Z'),*('0'..'9')]-%w(0 1 I O)).sample(8).join
生成随机的8个字符串(例如3PH4SWF2),不包括0/1/I/O。红宝石1.9
Array.new(n){[*“0”..“9”].sample}.join,其中n=8。
广义:Array.new(n){[*“A”..“Z”,*“0”..“9”].sample}.join等。
来自:“生成伪随机字符串A-Z,0-9”。
我的2美分:
def token(length=16)
chars = [*('A'..'Z'), *('a'..'z'), *(0..9)]
(0..length).map {chars.sample}.join
end
我们一直在代码中使用这个:
class String
def self.random(length=10)
('a'..'z').sort_by {rand}[0,length].join
end
end
支持的最大长度是25(无论如何,我们只在默认情况下使用它,所以这不是问题)。
有人提到“…”如果你想完全避免产生冒犯性的词语,z是次优的。我们的一个想法是去掉元音,但你最终还是会得到WTFBBQ等。