47 lines
927 B
Go
47 lines
927 B
Go
|
|
package randx
|
||
|
|
|
||
|
|
import (
|
||
|
|
"crypto/rand"
|
||
|
|
"math/big"
|
||
|
|
"strings"
|
||
|
|
)
|
||
|
|
|
||
|
|
const (
|
||
|
|
randNumberChars = "0123456789"
|
||
|
|
randLetterChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
||
|
|
)
|
||
|
|
|
||
|
|
func generateValues(str string, n int, upper bool) string {
|
||
|
|
if n <= 0 {
|
||
|
|
return ""
|
||
|
|
}
|
||
|
|
|
||
|
|
sb := strings.Builder{}
|
||
|
|
sb.Grow(n)
|
||
|
|
bigInt := big.NewInt(int64(len(str)))
|
||
|
|
for i := 0; i < n; i++ {
|
||
|
|
randomInt, _ := rand.Int(rand.Reader, bigInt)
|
||
|
|
sb.WriteByte(str[randomInt.Int64()])
|
||
|
|
}
|
||
|
|
s := sb.String()
|
||
|
|
if upper {
|
||
|
|
s = strings.ToUpper(s)
|
||
|
|
}
|
||
|
|
return s
|
||
|
|
}
|
||
|
|
|
||
|
|
// Letter Generate letter rand string
|
||
|
|
func Letter(n int, upper bool) string {
|
||
|
|
return generateValues(randLetterChars, n, upper)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Number Generate number rand string
|
||
|
|
func Number(n int) string {
|
||
|
|
return generateValues(randNumberChars, n, false)
|
||
|
|
}
|
||
|
|
|
||
|
|
// Any Generate number and letter combined string
|
||
|
|
func Any(n int) string {
|
||
|
|
return generateValues(randLetterChars+randNumberChars, n, false)
|
||
|
|
}
|