生成随机字符串,不带SecureRandom

时间:2010-08-07 17:02:27

标签: ruby

我需要为多部分上传生成边界

  post << "--#{BOUNDARY}\r\n"
  post << "Content-Disposition: form-data; name=\"datafile\"; filename=\"#{filename}\"\r\n"
  post << "Content-Type: text/plain\r\n"
  post << "\r\n"
  post << file
  post << "\r\n--#{BOUNDARY}--\r\n"

BOUNDARY必须是随机字符串(文件中不存在)。

在rails中,我可以做SecureRandom.hex(10)

如果不加载activesupport,我可以执行哪些操作?

3 个答案:

答案 0 :(得分:5)

如果您需要随机字母数字字符串,请使用以下内容:

rand(10000000000000).floor.to_s(36)

这将产生一个随机数(更改乘数以使字符串更长)并以基数36(10个数字+ 26个字母)表示。

对于Base64字符串,您可以执行类似

的操作
require 'base64'
Base64.encode64(rand(10000000000000).to_s).chomp("=\n")

如果您需要固定长度的字符串,请使用您提供的随机数范围,使用1000000 + rand(10000000)。

答案 1 :(得分:0)

上次我在rand上使用MD5是这样的:

require 'md5'
random_string = MD5.md5(rand(1234567).to_s).to_s

答案 2 :(得分:0)

如果你想要随机的字母数字字符串,你可以这样做

 o =  [('a'..'z'),('A'..'Z'),('0'..'9')].map{|i| i.to_a}.flatten
 string  =  (0...50).map{ o[rand(o.length)]  }.join

这也会生成一个字母数字随机字符串

rand(36**length).to_s(36)

您还可以传递“长度”以生成随机字符串的大小。例8或10