Files
Quincy_admin/utils/generator_util.go
2026-03-26 22:13:03 +08:00

127 lines
2.9 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 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
}