go-common/app/common/openplatform/random/uniqid.go
2019-04-22 18:49:16 +08:00

36 lines
583 B
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}