广告平台(站长使用)
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

rand.go 1.1 KiB

3ヶ月前
3ヶ月前
3ヶ月前
3ヶ月前
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package utils
  2. import (
  3. crand "crypto/rand"
  4. "fmt"
  5. "math/big"
  6. "math/rand"
  7. "strconv"
  8. "time"
  9. )
  10. func RandString(l int, c ...string) string {
  11. var (
  12. chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
  13. str string
  14. num *big.Int
  15. )
  16. if len(c) > 0 {
  17. chars = c[0]
  18. }
  19. chrLen := int64(len(chars))
  20. for len(str) < l {
  21. num, _ = crand.Int(crand.Reader, big.NewInt(chrLen))
  22. str += string(chars[num.Int64()])
  23. }
  24. return str
  25. }
  26. func RandNum() string {
  27. seed := time.Now().UnixNano() + rand.Int63()
  28. return fmt.Sprintf("%05v", rand.New(rand.NewSource(seed)).Int31n(1000000))
  29. }
  30. func GenerateUniqueRandomNumbers(n int) string {
  31. rand.Seed(time.Now().UnixNano()) // 初始化随机种子
  32. numbers := make([]int, n) // 创建一个切片来保存随机数
  33. for i := range numbers {
  34. j := 0
  35. for {
  36. b := rand.Intn(10) // 生成0-9之间的随机数
  37. numbers[i] = b
  38. for _, num := range numbers[:i] {
  39. if num == b {
  40. j++
  41. break
  42. }
  43. }
  44. if j == 0 {
  45. break
  46. }
  47. }
  48. }
  49. var numbersStr string
  50. for _, v := range numbers {
  51. numbersStr += strconv.Itoa(v)
  52. }
  53. return numbersStr
  54. }