我想在一个长度范围内生成唯一的随机字符串。比如我设置长度为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
关于algorithm - 如何使用 Golang 生成长度范围内唯一的随机字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38418171/