package utils import ( "fmt" "math/rand" "strconv" "time" ) // Generator 资产编号生成器 var Generator *AssetNumberGenerator // init 初始化 func init() { Generator = &AssetNumberGenerator{dateMap: make(map[string]int)} } // AssetNumberGenerator 资产编号生成器 type AssetNumberGenerator struct { dateMap map[string]int } // GenerateAssetNumber 生成资产编号 // 生成规则:4位平台id+8位登记日期+5位登记次序+4位随机数 = 21位 func (g *AssetNumberGenerator) GenerateAssetNumber(platformId string) string { // 获取当前日期 date := time.Now().Format("20060102") // 从map中查询,当日的累加索引 // 如果不存在,则从1开始计数 // 如果存在,则+1 index, exist := g.dateMap[date] if !exist { index = 1 } else { index++ } g.dateMap[date] = index indexStr := fmt.Sprintf("%05d", index) randChar := strconv.Itoa(rand.Intn(9000) + 1000) prefix := "TEST" if platformId != "" { prefix = platformId } identifier := prefix + date + indexStr + randChar return identifier }