package rand import ( "crypto/rand" "encoding/base64" "fmt" randv2 "math/rand/v2" "strings" ) const alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" func Bytes(n int) ([]byte, error) { b := make([]byte, n) nRead, err := rand.Read(b) if err != nil { return nil, fmt.Errorf("bytes: %w", err) } if nRead < n { return nil, fmt.Errorf("bytes: didn't read enough random bytes") } return b, nil } func String(n int) (string, error) { b, err := Bytes(n) if err != nil { return "", fmt.Errorf("string: %w", err) } return base64.URLEncoding.EncodeToString(b), nil } func RandomInt(n int) string { letters := []byte("0123456789") l := len(letters) result := make([]byte, n) for i := range result { result[i] = letters[randv2.IntN(l)] } return string(result) } func RandomString(n int) string { var sb strings.Builder k := len(alphabet) for range n { c := alphabet[randv2.IntN(k)] sb.WriteByte(c) } return sb.String() }