How to properly seed random number generator

前端 未结 9 1239
陌清茗
陌清茗 2020-11-28 20:25

I am trying to generate a random string in Go and here is the code I have written so far:

package main

import (
    \"bytes\"
    \"fmt\"
    \"math/rand\"
         


        
9条回答
  •  我在风中等你
    2020-11-28 21:02

    It's nano seconds, what are the chances of getting the same seed twice.
    Anyway, thanks for the help, here is my end solution based on all the input.

    package main
    
    import (
        "math/rand"
        "time"
    )
    
    func init() {
        rand.Seed(time.Now().UTC().UnixNano())
    }
    
    // generates a random string
    func srand(min, max int, readable bool) string {
    
        var length int
        var char string
    
        if min < max {
            length = min + rand.Intn(max-min)
        } else {
            length = min
        }
    
        if readable == false {
            char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
        } else {
            char = "ABCDEFHJLMNQRTUVWXYZabcefghijkmnopqrtuvwxyz23479"
        }
    
        buf := make([]byte, length)
        for i := 0; i < length; i++ {
            buf[i] = char[rand.Intn(len(char)-1)]
        }
        return string(buf)
    }
    
    // For testing only
    func main() {
        println(srand(5, 5, true))
        println(srand(5, 5, true))
        println(srand(5, 5, true))
        println(srand(5, 5, false))
        println(srand(5, 7, true))
        println(srand(5, 10, false))
        println(srand(5, 50, true))
        println(srand(5, 10, false))
        println(srand(5, 50, true))
        println(srand(5, 10, false))
        println(srand(5, 50, true))
        println(srand(5, 10, false))
        println(srand(5, 50, true))
        println(srand(5, 4, true))
        println(srand(5, 400, true))
        println(srand(6, 5, true))
        println(srand(6, 5, true))
        println(srand(6, 5, true))
        println(srand(6, 5, true))
        println(srand(6, 5, true))
        println(srand(6, 5, true))
        println(srand(6, 5, true))
        println(srand(6, 5, true))
        println(srand(6, 5, true))
        println(srand(6, 5, true))
        println(srand(6, 5, true))
        println(srand(6, 5, true))
    }
    

提交回复
热议问题