2017-12-29 16:03:30 +08:00
|
|
|
// Copyright 2017 gf Author(https://gitee.com/johng/gf). All Rights Reserved.
|
|
|
|
|
//
|
|
|
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
|
|
|
// If a copy of the MIT was not distributed with this file,
|
|
|
|
|
// You can obtain one at https://gitee.com/johng/gf.
|
|
|
|
|
|
2018-01-03 10:38:53 +08:00
|
|
|
// 随机数管理
|
2017-11-23 10:21:28 +08:00
|
|
|
package grand
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"time"
|
|
|
|
|
)
|
2018-10-13 20:29:27 +08:00
|
|
|
|
2017-11-23 10:21:28 +08:00
|
|
|
var letters = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
|
|
|
|
|
var digits = []rune("0123456789")
|
2018-10-13 20:29:27 +08:00
|
|
|
|
|
|
|
|
// 自定义的 rand.Intn
|
|
|
|
|
func intn (max int) int {
|
2018-10-15 13:13:23 +08:00
|
|
|
return int(time.Now().UnixNano())%max
|
2018-04-27 11:38:26 +08:00
|
|
|
}
|
|
|
|
|
|
2017-11-23 10:21:28 +08:00
|
|
|
// 获得一个 min, max 之间的随机数(min <= x <= max)
|
|
|
|
|
func Rand (min, max int) int {
|
|
|
|
|
if min >= max {
|
|
|
|
|
return min
|
|
|
|
|
}
|
2018-10-13 20:29:27 +08:00
|
|
|
if min == 0 {
|
|
|
|
|
return intn(max + 1)
|
|
|
|
|
}
|
|
|
|
|
if min > 0 {
|
|
|
|
|
// 数值往左平移,再使用底层随机方法获得随机数,随后将结果数值往右平移
|
|
|
|
|
return intn(max - (min - 0) + 1) + (min - 0)
|
|
|
|
|
}
|
|
|
|
|
if min < 0 {
|
|
|
|
|
// 数值往右平移,再使用底层随机方法获得随机数,随后将结果数值往左平移
|
|
|
|
|
return intn(max + (0 - min) + 1) - (0 - min)
|
2017-11-23 10:21:28 +08:00
|
|
|
}
|
2018-10-13 20:29:27 +08:00
|
|
|
return 0
|
2017-11-23 10:21:28 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获得指定长度的随机字符串(可能包含数字和字母)
|
|
|
|
|
func RandStr(n int) string {
|
|
|
|
|
b := make([]rune, n)
|
|
|
|
|
for i := range b {
|
2018-10-13 20:29:27 +08:00
|
|
|
if intn(2) == 1 {
|
|
|
|
|
b[i] = digits[intn(10)]
|
2017-11-23 10:21:28 +08:00
|
|
|
} else {
|
2018-10-13 20:29:27 +08:00
|
|
|
b[i] = letters[intn(52)]
|
2017-11-23 10:21:28 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return string(b)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获得指定长度的随机数字字符串
|
|
|
|
|
func RandDigits(n int) string {
|
|
|
|
|
b := make([]rune, n)
|
|
|
|
|
for i := range b {
|
2018-10-13 20:29:27 +08:00
|
|
|
b[i] = digits[intn(10)]
|
2017-11-23 10:21:28 +08:00
|
|
|
}
|
|
|
|
|
return string(b)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获得指定长度的随机字母字符串
|
|
|
|
|
func RandLetters(n int) string {
|
|
|
|
|
b := make([]rune, n)
|
|
|
|
|
for i := range b {
|
2018-10-13 20:29:27 +08:00
|
|
|
b[i] = letters[intn(52)]
|
2017-11-23 10:21:28 +08:00
|
|
|
}
|
|
|
|
|
return string(b)
|
|
|
|
|
}
|