36 lines
583 B
Go
36 lines
583 B
Go
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
|
||
}
|