制定长度的随机字符串的问题.~

jan9snow · 2018-11-22 02:41:19 · 837 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-11-22 02:41:19 的主题,其中的信息可能已经有所发展或是发生改变。

// 生成指定长度的字符串
func RandomStr(len int) (salt []byte) {
    salt = make([]byte, len)

    rnd := rand.New(rand.NewSource(time.Now().UnixNano()))
    for i := 0; i < 6;i++ {
        salt[i] = byte(rnd.Intn(95) + 32)
    }

    return
}

然后打印10次,:

salt =  (T(Q]!
salt =  (T(Q]!
salt =  (T(Q]!
salt =  (T(Q]!
salt =  (T(Q]!
salt =  (T(Q]!
salt =  (T(Q]!
salt =  s0H1(!
salt =  s0H1(!
salt =  s0H1(!

WTF : 随机字符串有这么难写吗? 问题在哪里?


有疑问加站长微信联系(非本文作者)

第 1 条附言  ·  2018-11-25 00:04:19

做个结束吧...
这段代码,我用 for 循环试了几次,都是重复的随机数.因为这样写是不对的. 如果项目中用到了随机数...那么应该直接在 main.goinit() 文件里喂个随机数的种子.用的时候在 喂, 就可能导致,喂的数字一样而使生成的随机序列一致.

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

837 次点击  
加入收藏 微博
5 回复  |  直到 2018-11-23 18:36:13
chenph
chenph · #1 · 6年之前

试了一下,每次生成的都不一样啊

chenph
chenph · #2 · 6年之前

而且随机字符串,用uuid多省事啊

jan9snow
jan9snow · #3 · 6年之前
chenphchenph #1 回复

试了一下,每次生成的都不一样啊

干.. 难道是 我的Ryzen CPU 闹腾的? 还是 win 10 闹腾的.~~

jan9snow
jan9snow · #4 · 6年之前

可能是硬件问题吧, 不管了,,,先贴出我的解决方案:

import (
    "crypto/rand"
    "math/big"
)
func RandomStr(len int) (salt []byte) {
    salt = make([]byte, len)

    max := big.NewInt(95)
    for i := 0; i < 6;i++ {
        num, _ := rand.Int(rand.Reader,max)
        salt[i] = byte(int(num.Int64()) + 32)
    }

    return
}
johng
johng · #5 · 6年之前

GF框架的grand模块(https://gfer.me/util/grand/index )里面有一个随机字符串的方法,你可以参考下。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传