1
This commit is contained in:
@ -103,6 +103,31 @@ func (in IntToStr) Encode(uid int) string {
|
||||
return string(code)
|
||||
}
|
||||
|
||||
func (i IntToStr) GenerateRandomCode(num int) string {
|
||||
// 用当前时间 + 随机数生成编码基础值
|
||||
rand.Seed(time.Now().UnixNano()) // Ensure randomness
|
||||
num = num + rand.Intn(10000) // 通过加入随机数,避免重复
|
||||
|
||||
// 对输入进行基础的模运算,避免直接按时间戳生成
|
||||
var result []rune
|
||||
for num > 0 {
|
||||
result = append(result, i.AlphanumericSet[num%len(i.AlphanumericSet)])
|
||||
num = num / len(i.AlphanumericSet)
|
||||
}
|
||||
|
||||
// 返回编码后的字符串,并保证字符串长度固定
|
||||
for len(result) < i.Len {
|
||||
result = append(result, i.AlphanumericSet[rand.Intn(len(i.AlphanumericSet))])
|
||||
}
|
||||
|
||||
// 将结果逆序,保证更好的随机性
|
||||
for i, j := 0, len(result)-1; i < j; i, j = i+1, j-1 {
|
||||
result[i], result[j] = result[j], result[i]
|
||||
}
|
||||
|
||||
return string(result)
|
||||
}
|
||||
|
||||
const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
||||
const smsLetters = "0123456789"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user