Files
exchange_go/pkg/utility/seqs/rand.go
2025-02-06 11:14:33 +08:00

69 lines
1.2 KiB
Go

package seqs
import (
cr "crypto/rand"
"math/big"
mr "math/rand"
"time"
)
// 随机生成器;
type rand struct {
}
// 全局随机数;
var rnd *mr.Rand
func init() {
rnd = mr.New(mr.NewSource(time.Now().UnixNano()))
}
// 构建;
func Rand() *rand {
return &rand{}
}
// 随机数字;
func (rd *rand) DigitId(_len int) string {
return rd.newId([]byte("0123456789"), _len)
}
// 随机字母;
func (rd *rand) ChrtId(_len int) string {
return rd.newId([]byte("abcdefghijklmnopqrstuvwxyz"), _len)
}
// 随机混合(数字+字母);
func (rd *rand) BothId(_len int) string {
return rd.newId([]byte("0123456789abcdefghijklmnopqrstuvwxyz"), _len)
}
// 随机范围(长整型);
func (rd *rand) RandI64(min, max int64) int64 {
bi, _ := cr.Int(cr.Reader, big.NewInt(max-min))
return min + bi.Int64()
}
// 随机范围(0 ~ max);
func (rd *rand) RandInt(max int) int {
return rnd.Intn(max)
}
// 随机中文;
func (rd *rand) ChrtCn(_len int) string {
a := make([]rune, _len)
for i := range a {
a[i] = rune(rd.RandI64(19968, 40869))
}
return string(a)
}
// newId;
func (rd *rand) newId(tmpl []byte, _len int) string {
var r []byte
for i := 0; i < _len; i++ {
r = append(r, tmpl[rnd.Intn(len(tmpl))])
}
return string(r)
}