Files
lckt-server/utils/rand_code.go

63 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package utils
import (
"crypto/md5"
"fmt"
"math/rand"
"time"
)
const charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
// GenerateInviteCode 生成邀请码基于用户ID和随机数的MD5哈希
func GenerateInviteCode(userID uint) string {
rand.Seed(time.Now().UnixNano())
// 拼接用户ID和随机数
data := fmt.Sprintf("%d%d", userID, rand.Intn(1000000))
hash := md5.Sum([]byte(data))
code := ""
for i := 0; i < 6; i++ {
// 取哈希的前6位每位映射到字符集
code += string(charset[int(hash[i])%len(charset)])
}
return code
}
func GenerateRandomString(length int) string {
rand.Seed(time.Now().UnixNano())
// 拼接用户ID和随机数
data := fmt.Sprintf("%d%d", 6, rand.Intn(1000000))
hash := md5.Sum([]byte(data))
code := ""
for i := 0; i < 12; i++ {
// 取哈希的前6位每位映射到字符集
code += string(charset[int(hash[i])%len(charset)])
}
return code
}
// GenerateRedeemCode 生成单个兑换码格式为N7DY4kcf5z37hwz随机大小写字母+数字
func GenerateRedeemCode() string {
const codeCharset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
codeLen := 15
b := make([]byte, codeLen)
for i := range b {
b[i] = codeCharset[rand.Intn(len(codeCharset))]
}
return string(b)
}
// GenerateRedeemCodes 批量生成唯一兑换码number为生成数量
func GenerateRedeemCodes(number int) []string {
codesMap := make(map[string]struct{}, number)
for len(codesMap) < number {
code := GenerateRedeemCode()
codesMap[code] = struct{}{}
}
codes := make([]string, 0, number)
for code := range codesMap {
codes = append(codes, code)
}
return codes
}