// // uniq_helper.go // Copyright (C) 2023 tiglog // // Distributed under terms of the MIT license. // package helper import ( "git.hexq.cn/tiglog/golib/crypto/gmd5" "github.com/rs/xid" ) // 唯一字符串 // 返回字符串长度为 20 func GenId() string { guid := xid.New() return guid.String() } // 可变长度的唯一字符串 // 长度太短,可能就不唯一了 // 长度大于等于 16 为最佳 // 长度小于20时,为 GenId 的值 md5 后的前缀,因此,理论上前6位也能在大多数情况 // 下唯一 func Uniq(l int) string { if l <= 0 { panic("wrong length param") } ret := GenId() hl := len(ret) if l < hl { t, err := gmd5.EncryptString(ret) if err != nil { return ret[hl-l:] } return t[:l] } mhac_len := 6 pl := len(ret) var hash string for l > pl { hash = GenId() hash = hash[mhac_len:] ret += hash pl += len(hash) } // log.Println("ret=", ret, ", pl=", pl, ", l=", l) return ret[0:l] }