package rand import ( mrand "math/rand" ) const ( strChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" // 62 characters ) // Str constructs a random alphanumeric string of given length // from math/rand's global default Source. func Str(length int) string { return buildString(length, mrand.Int63) } // StrFromSource produces a random string of a specified length from // the specified random source. func StrFromSource(r *mrand.Rand, length int) string { return buildString(length, r.Int63) } func buildString(length int, picker func() int64) string { if length <= 0 { return "" } chars := make([]byte, 0, length) for { val := picker() for i := 0; i < 10; i++ { v := int(val & 0x3f) // rightmost 6 bits if v >= 62 { // only 62 characters in strChars val >>= 6 continue } else { chars = append(chars, strChars[v]) if len(chars) == length { return string(chars) } val >>= 6 } } } } // Bytes returns n random bytes generated from math/rand's global default Source. func Bytes(n int) []byte { bs := make([]byte, n) for i := 0; i < len(bs); i++ { // nolint:gosec // G404: Use of weak random number generator bs[i] = byte(mrand.Int() & 0xFF) } return bs }