go-common/app/common/openplatform/random/uniqid.go

36 lines
583 B
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package random
import (
"math"
"math/rand"
"time"
)
var (
rnd *rand.Rand
ch chan int64
)
func init() {
rnd = rand.New(rand.NewSource(time.Now().UnixNano()))
ch = make(chan int64, 1000)
go randomBase(ch)
}
func randomBase(c chan int64) {
for {
c <- rnd.Int63()
}
}
//Uniqid 随机数length是需要返回的长度只支持10~19位
func Uniqid(length int) int64 {
if length < 10 || length > 19 {
return 0
}
prefix := (time.Now().UnixNano() / 100000000) & 0x3fffffff
cut := int64(math.Pow10(length - 9))
suffix := <-ch % cut
return prefix*cut + suffix
}