diff --git a/common/random.go b/common/random.go index 186fb2a40..6e92d96df 100644 --- a/common/random.go +++ b/common/random.go @@ -1,12 +1,33 @@ package common -import "crypto/rand" +import ( + "math/rand" +) +const ( + strChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" // 62 characters +) + +// Construts an alphanumeric string of given length. func RandStr(length int) string { - b := make([]byte, length) - _, err := rand.Read(b) - if err != nil { - return "" + chars := []byte{} +MAIN_LOOP: + for { + val := rand.Int63() + 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 { + break MAIN_LOOP + } + val >>= 6 + } + } } - return string(b) + + return string(chars) }