customer/pkg/utils/random.go
2023-05-16 04:12:34 +03:00

34 lines
874 B
Go

package utils
import (
"math/rand"
"time"
)
const (
letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
letterIndexBits = 6 // 6 bits to represent a letter index
letterIndexMask = 1<<letterIndexBits - 1 // All 1-bits, as many as letterIdxBits
letterIndexMax = 63 / letterIndexBits // # of letter indices fitting in 63 bits
)
func GetRandomString(size int) string {
src := rand.NewSource(time.Now().UnixNano())
bytes := make([]byte, size)
for bytesIndex, cache, remain := size-1, src.Int63(), letterIndexMax; bytesIndex >= 0; {
if remain == 0 {
cache, remain = src.Int63(), letterIndexMax
}
if letterIndex := int(cache & letterIndexMask); letterIndex < len(letterBytes) {
bytes[bytesIndex] = letterBytes[letterIndex]
bytesIndex--
}
cache >>= letterIndexBits
remain--
}
return string(bytes)
}