gitee.com/h79/goutils@v1.22.10/common/random/random.go (about)

     1  package random
     2  
     3  import (
     4  	"math/rand"
     5  	"strings"
     6  	"time"
     7  )
     8  
     9  var allChar = []byte("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
    10  var letterChar = []byte("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
    11  var numberChar = []byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
    12  
    13  func init() {
    14  }
    15  
    16  func Source() rand.Source {
    17  	return rand.NewSource(time.Now().UnixNano())
    18  }
    19  
    20  func Random() *rand.Rand {
    21  	return rand.New(Source())
    22  }
    23  
    24  func generateString(bytes []byte, length int) string {
    25  	return generateStringV2(Random(), bytes, length)
    26  }
    27  
    28  func generateStringV2(r *rand.Rand, bytes []byte, length int) string {
    29  	l := len(bytes)
    30  	if l <= 0 {
    31  		return ""
    32  	}
    33  	build := &strings.Builder{}
    34  	for i := 0; i < length; i++ {
    35  		build.WriteByte(bytes[r.Intn(l)])
    36  	}
    37  	return build.String()
    38  }
    39  
    40  // GenerateString
    41  /**
    42   * 返回一个定长的随机字符串(只包含大小写字母、数字)
    43   *
    44   * @param length
    45   *            随机字符串长度
    46   * @return 随机字符串
    47   */
    48  func GenerateString(length int) string {
    49  	return generateString(allChar, length)
    50  }
    51  func GenerateStringV2(r *rand.Rand, length int) string {
    52  	return generateStringV2(r, allChar, length)
    53  }
    54  
    55  // GenerateNumString
    56  /**
    57   * 返回一个定长的随机数字字符串(只包含数字)
    58   *
    59   * @param length
    60   *            随机字符串长度
    61   * @return 随机字符串
    62   */
    63  func GenerateNumString(length int) string {
    64  	return generateString(numberChar, length)
    65  }
    66  func GenerateNumStringV2(r *rand.Rand, length int) string {
    67  	return generateStringV2(r, numberChar, length)
    68  }
    69  
    70  // GenerateMixString
    71  /**
    72   * 返回一个定长的随机纯字母字符串(只包含大小写字母)
    73   *
    74   * @param length
    75   *            随机字符串长度
    76   * @return 随机字符串
    77   */
    78  func GenerateMixString(length int) string {
    79  	return generateString(letterChar, length)
    80  }
    81  func GenerateMixStringV2(r *rand.Rand, length int) string {
    82  	return generateStringV2(r, letterChar, length)
    83  }
    84  
    85  // GenerateLowerString
    86  /**
    87   * 返回一个定长的随机纯小写字母字符串(只包含大小写字母)
    88   *
    89   * @param length
    90   *            随机字符串长度
    91   * @return 随机字符串
    92   */
    93  func GenerateLowerString(length int) string {
    94  	return strings.ToLower(GenerateMixString(length))
    95  }
    96  func GenerateLowerStringV2(r *rand.Rand, length int) string {
    97  	return strings.ToLower(GenerateMixStringV2(r, length))
    98  }
    99  
   100  // GenerateUpperString
   101  /**
   102   * 返回一个定长的随机纯大写字母字符串(只包含大小写字母)
   103   *
   104   * @param length
   105   *            随机字符串长度
   106   * @return 随机字符串
   107   **/
   108  func GenerateUpperString(length int) string {
   109  	return strings.ToUpper(GenerateMixString(length))
   110  }
   111  func GenerateUpperStringV2(r *rand.Rand, length int) string {
   112  	return strings.ToUpper(GenerateMixStringV2(r, length))
   113  }