random.go 876 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package random
  2. import (
  3. "math/rand"
  4. "strings"
  5. "time"
  6. )
  7. type (
  8. Random struct {
  9. }
  10. )
  11. // Charsets
  12. const (
  13. Uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  14. Lowercase = "abcdefghijklmnopqrstuvwxyz"
  15. Alphabetic = Uppercase + Lowercase
  16. Numeric = "0123456789"
  17. Alphanumeric = Alphabetic + Numeric
  18. Symbols = "`" + `~!@#$%^&*()-_+={}[]|\;:"<>,./?`
  19. Hex = Numeric + "abcdef"
  20. )
  21. var (
  22. global = New()
  23. )
  24. func New() *Random {
  25. rand.Seed(time.Now().UnixNano())
  26. return new(Random)
  27. }
  28. func (r *Random) String(length uint8, charsets ...string) string {
  29. charset := strings.Join(charsets, "")
  30. if charset == "" {
  31. charset = Alphanumeric
  32. }
  33. b := make([]byte, length)
  34. for i := range b {
  35. b[i] = charset[rand.Int63()%int64(len(charset))]
  36. }
  37. return string(b)
  38. }
  39. func String(length uint8, charsets ...string) string {
  40. return global.String(length, charsets...)
  41. }