生成表结构,开始实现接口逻辑

This commit is contained in:
2025-05-29 16:22:48 +08:00
parent a048f45aa3
commit e8a8e36d61
21 changed files with 277 additions and 211 deletions

View File

@ -1,32 +1,34 @@
package utility
import (
"crypto/rand"
"fmt"
"math/rand"
"math/big"
"strings"
"time"
)
// GenerateUserID 根据传入的用户类型生成唯一的用户ID。
// 用户ID格式为<PREFIX>_<16位数字字符串>例如QQ_2025052712345678。
// 用户ID格式为<PREFIX>_<17位数字字符串>例如QQ_20250527123456789
// 前缀由 userType 参数指定(例如 "qq"、"wx"),自动转换为大写。
// 数字部分由当前时间戳随机数拼接而成,确保唯一性。
// 数字部分由当前时间戳毫秒级与4位加密随机数拼接而成,确保唯一性。
//
// 参数:
// - userType: 用户类型,如 "qq" 或 "wx"
//
// 返回值:
// - string: 格式为 <大写前缀>_<16位唯一数字> 的用户ID
// - string: 格式为 <大写前缀>_<17位唯一数字> 的用户ID
func GenerateUserID(userType string) string {
prefix := strings.ToUpper(userType)
timestamp := fmt.Sprintf("%d", time.Now().UnixNano())
core := timestamp[:12]
// 当前时间戳毫秒级长度为13位
timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/1e6)
rand.Seed(time.Now().UnixNano())
suffix := fmt.Sprintf("%04d", rand.Intn(10000))
idNum := core + suffix
// 生成一个0~9999之间的随机数补齐4位
suffixNum, _ := rand.Int(rand.Reader, big.NewInt(10000))
suffix := fmt.Sprintf("%04d", suffixNum.Int64())
// 拼接最终ID
idNum := timestamp + suffix
return fmt.Sprintf("%s_%s", prefix, idNum)
}