random.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // Package random provides utilities for generating random strings and numbers.
  2. package random
  3. import (
  4. "math/rand"
  5. )
  6. var (
  7. numSeq [10]rune
  8. lowerSeq [26]rune
  9. upperSeq [26]rune
  10. numLowerSeq [36]rune
  11. numUpperSeq [36]rune
  12. allSeq [62]rune
  13. )
  14. // init initializes the character sequences used for random string generation.
  15. // It sets up arrays for numbers, lowercase letters, uppercase letters, and combinations.
  16. func init() {
  17. for i := 0; i < 10; i++ {
  18. numSeq[i] = rune('0' + i)
  19. }
  20. for i := 0; i < 26; i++ {
  21. lowerSeq[i] = rune('a' + i)
  22. upperSeq[i] = rune('A' + i)
  23. }
  24. copy(numLowerSeq[:], numSeq[:])
  25. copy(numLowerSeq[len(numSeq):], lowerSeq[:])
  26. copy(numUpperSeq[:], numSeq[:])
  27. copy(numUpperSeq[len(numSeq):], upperSeq[:])
  28. copy(allSeq[:], numSeq[:])
  29. copy(allSeq[len(numSeq):], lowerSeq[:])
  30. copy(allSeq[len(numSeq)+len(lowerSeq):], upperSeq[:])
  31. }
  32. // Seq generates a random string of length n containing alphanumeric characters (numbers, lowercase and uppercase letters).
  33. func Seq(n int) string {
  34. runes := make([]rune, n)
  35. for i := 0; i < n; i++ {
  36. runes[i] = allSeq[rand.Intn(len(allSeq))]
  37. }
  38. return string(runes)
  39. }
  40. // Num generates a random integer between 0 and n-1.
  41. func Num(n int) int {
  42. return rand.Intn(n)
  43. }