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 }