Files
sundynix-radio-be/utils/uniqueid/id_generator.go
T
2026-03-05 16:54:25 +08:00

46 lines
1.3 KiB
Go

package uniqueid
import (
"fmt"
"math/rand"
"time"
"github.com/google/uuid"
)
func GenerateId() string {
uuidV1, err := uuid.NewUUID()
if err != nil {
panic(err)
}
return uuidV1.String()
}
// GenerateRadioUsername 生成具有电台氛围的用户名称
func GenerateRadioUsername() string {
// 1. 文艺词库
adjectives := []string{"虚构", "私奔", "落日", "低空", "巡航", "无声", "迷失", "告白", "极光", "霓虹"}
nouns := []string{"调频", "电波", "磁带", "频率", "回声", "岛屿", "信箱", "航站", "独白", "碎片"}
// 2. 初始化随机种子 (使用纳秒级时间戳)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
// 3. 随机抽取词库
adj := adjectives[r.Intn(len(adjectives))]
noun := nouns[r.Intn(len(nouns))]
// 4. 获取当前时间的微秒/纳秒部分作为“身份码”
// 取纳秒的最后5位,既能体现随机性,又不会像日期那样冗长
timeSuffix := time.Now().UnixNano() % 100000
// 5. 混合生成:采用不同的模板增加随机感
templates := []string{
"%s%s_%05d", // 如:落日电波_12345
"Hz.%d-%s%s", // 如:Hz.67890-虚构独白
"%s%s-%d-FM", // 如:迷失频率-54321-FM
}
selectedTemplate := templates[r.Intn(len(templates))]
return fmt.Sprintf(selectedTemplate, adj, noun, timeSuffix)
}