46 lines
1.3 KiB
Go
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)
|
|
}
|