我想在长度范围内生成唯一的随机字符串。例如,我设置的长度为10.并且每次生成的字符串都是唯一的。
答案 0 :(得分:9)
独特之处是多么独特?
如果普遍唯一,请参阅:https://en.wikipedia.org/wiki/Universally_unique_identifier
在总共128位中,类型4 UUID具有6个保留位(4个用于版本和2个其他保留位),因此随机生成的UUID具有122个随机位。
如何展示?(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