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 }