49 lines
876 B
Go
49 lines
876 B
Go
|
package random
|
||
|
|
||
|
import (
|
||
|
"math/rand"
|
||
|
"strings"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type (
|
||
|
Random struct {
|
||
|
}
|
||
|
)
|
||
|
|
||
|
// Charsets
|
||
|
const (
|
||
|
Uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||
|
Lowercase = "abcdefghijklmnopqrstuvwxyz"
|
||
|
Alphabetic = Uppercase + Lowercase
|
||
|
Numeric = "0123456789"
|
||
|
Alphanumeric = Alphabetic + Numeric
|
||
|
Symbols = "`" + `~!@#$%^&*()-_+={}[]|\;:"<>,./?`
|
||
|
Hex = Numeric + "abcdef"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
global = New()
|
||
|
)
|
||
|
|
||
|
func New() *Random {
|
||
|
rand.Seed(time.Now().UnixNano())
|
||
|
return new(Random)
|
||
|
}
|
||
|
|
||
|
func (r *Random) String(length uint8, charsets ...string) string {
|
||
|
charset := strings.Join(charsets, "")
|
||
|
if charset == "" {
|
||
|
charset = Alphanumeric
|
||
|
}
|
||
|
b := make([]byte, length)
|
||
|
for i := range b {
|
||
|
b[i] = charset[rand.Int63()%int64(len(charset))]
|
||
|
}
|
||
|
return string(b)
|
||
|
}
|
||
|
|
||
|
func String(length uint8, charsets ...string) string {
|
||
|
return global.String(length, charsets...)
|
||
|
}
|