You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
583 B
35 lines
583 B
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 |
|
}
|
|
|