如何使用Golang生成长度范围内的唯一随机字符串?

时间:2016-07-17 05:24:50

标签: algorithm random go

我想在长度范围内生成唯一的随机字符串。例如,我设置的长度为10.并且每次生成的字符串都是唯一的。

1 个答案:

答案 0 :(得分:9)

独特之处是多么独特?
如果普遍唯一,请参阅:https://en.wikipedia.org/wiki/Universally_unique_identifier
在总共128位中,类型4 UUID具有6个保留位(4个用于版本和2个其他保留位),因此随机生成的UUID具有122个随机位。

对于UUID,请参阅:Is there a method to generate a UUID with go language

如何展示?Binary-to-text encoding
UUID只是一个128位值。如果以十六进制格式显示,则 32个字符 如果你想在10个地方,128/10 = 12.8 =>每个地方13位所以你需要8192字母!

以UTF-8编码的Golang中的字符串,因此您可以使用Unicode字母表: Unicode有足够的代码点,请参阅:How many characters can be mapped with Unicode?

<强>结论
如果您需要通用唯一,请使用UUID。

并查看:How to generate a random string of a fixed length in golang?

或者如果你需要长度为10的伪随机字符串,你可以使用它(但不是通用唯一的):

package main

import "crypto/rand"
import "fmt"

func main() {
    n := 5
    b := make([]byte, n)
    if _, err := rand.Read(b); err != nil {
        panic(err)
    }
    s := fmt.Sprintf("%X", b)
    fmt.Println(s)
}

示例输出:

FA8EA2FBCE

另见:Output UUID in Go as a short string

和:Is there a method to generate a UUID with go language