我正在为“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}
但它看起来像垃圾 .
有没有人有更好的方法?
30 回答
这是一行长度为8的随机字符串简单代码
您也可以将它用于长度为8的随机密码
我希望它会有所帮助和惊人 .
该解决方案为激活码生成一串易于阅读的字符;我不希望人们混淆8与B,1与I,0与O,L与1等 .
使用此方法,您可以传入一个abitrary长度 . 默认设置为6 .
你可以使用Ruby Gem
facets
的Facets中的String#random
:https://github.com/rubyworks/facets/blob/126a619fd766bc45588cac18d09c4f1927538e33/lib/core/facets/string/random.rb
它基本上是这样的:
鉴于:
单个表达式,可以作为参数传递,允许重复的字符:
因为ruby 2.5真的很容易
SecureRandom.alphanumeric
:生成包含A-Z,a-z和0-9的随机字符串,因此应适用于大多数用例 . 并且它们是随机生成的,这也可能是一个好处 .
编辑:将其与具有最多投票的解决方案进行比较的基准:
所以
rand
解决方案只占SecureRandom
的3/4左右 . 如果你生成了很多字符串可能很重要,但是如果你不时地创建一些随机字符串,我总会选择更安全的实现(因为它也更容易调用和更明确) .我使用它来生成具有保证最大长度的随机URL友好字符串:
它生成小写的a-z和0-9的随机字符串 . 它不是很容易定制,但它简洁干净 .
请注意:
rand
对于攻击者是可预测的,因此可能不安全 . 如果这是用于生成密码,您肯定应该使用SecureRandom . 我使用这样的东西:其他人提到类似的东西,但这使用URL安全功能 .
结果可能包含A-Z,a-z,0-9,“ - ”和“_” . 如果填充为真,则也使用“=” .
Array.new(n){[*"0".."9"].sample}.join
,其中n = 8 .广义:
Array.new(n){[*"A".."Z", *"0".."9"].sample}.join
等 - 来自this回答我最喜欢的是
(:A..:Z).to_a.shuffle[0,8].join
. 请注意,shuffle需要Ruby> 1.9 .我花太多时间打高尔夫球 .
而最后一个更令人困惑,但更灵活,浪费更少的周期:
我的2美分:
生成一个随机的8个字母的字符串(例如NVAYXHGR)
生成随机8字符串(例如3PH4SWF2),不包括0/1 / I / O. Ruby 1.9
我喜欢使用的另一种方法
如果你对正确的字符串长度真的很偏执,请添加:
我认为这是简洁,清晰和易于修改的良好 balancer .
轻松修改
例如,包括数字:
大写十六进制:
对于真正令人印象深刻的角色数组:
在这里加我的分钱......
我认为,到目前为止,我最喜欢Radar的答案 . 我有点像这样调整:
这是一个简单的随机密码代码,带有lenth 8
希望它会有所帮助 .
这个解决方案需要外部依赖,但看起来比另一个更漂亮 .
安装宝石faker
Faker::Lorem.characters(10) # => "ang9cbhoa8"
我只是写一个小宝石
random_token
为大多数用例生成随机令牌,享受〜https://github.com/sibevin/random_token
为什么不使用SecureRandom?
SecureRandom还有以下方法:
base64
random_bytes
random_number
见:http://ruby-doc.org/stdlib-1.9.2/libdoc/securerandom/rdoc/SecureRandom.html
来自Devise的东西
Ruby 1.9:
我最近正在做这样的事情来生成一个由62个字符组成的8字节随机字符串 . 字符为0-9,a-z,A-Z . 我有一个数组,循环8次,并从数组中选择一个随机值 . 这是一个rails应用程序 .
str = '' 8.times {|i| str << ARRAY_OF_POSSIBLE_VALUES[rand(SIZE_OF_ARRAY_OF_POSSIBLE_VALUES)] }
奇怪的是我得到了很多重复的东西 . 现在随机这应该永远不会发生 . 62 ^ 8是巨大的,但在db中1200个左右的代码中有大量重复 . 我注意到它们发生在彼此的小时界限上 . 换句话说,我可能会在12:12:23和2:12:22看到一个重复的东西......或者类似的东西...不确定时间是否是问题 .
此代码位于创建activerecord对象之前 . 在创建记录之前,此代码将运行并生成“唯一”代码 . 数据库中的条目总是可靠地生成,但代码(上面一行中的str)经常被复制 .
我 Build 一个脚本运行上面这行的100000次迭代,延迟很小,所以需要3-4个小时希望每小时看到一些重复模式,但什么都看不见 . 我不知道为什么这会发生在我的rails应用程序中 .
我不记得我在哪里发现了这个,但对我来说这似乎是最好和最少的过程:
如果需要指定长度的字符串,请使用:
它将生成一个长度为
2n
的随机字符串,其中包含0-9
和a-f