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

标签 algorithm random go

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

最佳答案

独特有多独特?
如果普遍唯一,请参阅: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 个字母表!

Golang 中的字符串以 UTF-8 编码,因此您可以使用 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

关于algorithm - 如何使用 Golang 生成长度范围内唯一的随机字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38418171/

相关文章:

testing - 如何对项目中除 vendor 包之外的所有测试文件运行 go test

go - gin-contrib/cors 返回 404

javascript - array.reduce 通过递归实现

python - 任何人都可以帮我检查这个 python 代码吗?

java - 使用蒙特卡罗方法查找域 2 ≤ x ≤ 4 中 y = x^4 下方的面积

python - 如何从INPUT生成范围内的随机数?

java - 动画中的随机种子

java - 找出前N个最流行的元素

python - 在python中搜索动态数组

go - Checkout.com 返回错误无效的付款货币