first commit

This commit is contained in:
何昌清
2026-03-26 22:13:03 +08:00
parent bbe1faa363
commit a2685f7f1e
51 changed files with 11244 additions and 0 deletions

126
utils/generator_util.go Normal file
View File

@@ -0,0 +1,126 @@
// Package utils generator_util.go
package utils
import (
"fmt"
"math/rand"
"strings"
"time"
)
// GenerateUserCode 生成指定前缀 + 指定长度随机数字的编码
// prefix: 字符串前缀,如 "S", "U" 等
// length: 数字部分长度,默认为 9 位
// 返回带前缀的 usercode例如 S123456789
func GenerateUserCode(prefix string, length int) string {
// 设置随机种子
rand.Seed(time.Now().UnixNano())
// 计算数字范围
mini := 1
maxi := 9
for i := 1; i < length; i++ {
mini *= 10
maxi = maxi*10 + 9
}
// 生成随机数
randomNum := rand.Intn(maxi-mini+1) + mini
return fmt.Sprintf("%s%d", prefix, randomNum)
}
// GenerateEmail 生成随机电子邮箱地址
// domain: 邮箱域名,默认为 "example.com"
// usernameLength: 用户名部分长度,默认为 8 位
// 返回随机邮箱地址,如 "a1b2c3d4@example.com"
func GenerateEmail(domain string, usernameLength int) (string, error) {
// 设置随机种子
rand.Seed(time.Now().UnixNano())
// 如果域名为空,使用默认域名
if domain == "" {
domain = "example.com"
}
// 如果用户名长度小于1使用默认长度
if usernameLength < 1 {
usernameLength = 8
}
// 定义字符集(小写字母和数字)
charset := "abcdefghijklmnopqrstuvwxyz0123456789"
// 最多重试 5 次
for i := 0; i < 5; i++ {
// 生成指定长度的用户名
username := make([]byte, usernameLength)
for j := range username {
username[j] = charset[rand.Intn(len(charset))]
}
email := fmt.Sprintf("%s@%s", string(username), domain)
// 检查邮箱有效性
if isValidEmail(email) {
return email, nil
}
}
return "", fmt.Errorf("无法生成有效邮箱地址,请调整参数")
}
// isValidEmail 简单验证邮箱地址有效性
func isValidEmail(email string) bool {
parts := strings.Split(email, "@")
if len(parts) != 2 {
return false
}
username := parts[0]
domain := parts[1]
// 检查用户名和域名是否非空
if username == "" || domain == "" {
return false
}
// 检查域名是否包含点
if !strings.Contains(domain, ".") {
return false
}
// 检查域名的点是否在正确位置
domainParts := strings.Split(domain, ".")
for _, part := range domainParts {
if part == "" {
return false
}
}
return true
}
// GenerateUsername 生成全英文随机用户名
// length: 用户名长度,默认为 8
// 返回全小写英文用户名,例如 "abcdefgh"
// 如果长度参数无效会返回错误
func GenerateUsername(length int) (string, error) {
// 设置随机种子
rand.Seed(time.Now().UnixNano())
// 验证长度参数
if length < 4 || length > 20 {
return "", fmt.Errorf("用户名长度需在4-20个字符之间")
}
// 定义字符集(仅小写字母)
charset := "abcdefghijklmnopqrstuvwxyz"
// 生成指定长度的用户名
username := make([]byte, length)
for i := range username {
username[i] = charset[rand.Intn(len(charset))]
}
return string(username), nil
}