123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package common
- import (
- "crypto/rand"
- "math/big"
- "net/mail"
- "strings"
- "github.com/google/uuid"
- )
- // HasPrefixes returns true if the string s has any of the given prefixes.
- func HasPrefixes(src string, prefixes ...string) bool {
- for _, prefix := range prefixes {
- if strings.HasPrefix(src, prefix) {
- return true
- }
- }
- return false
- }
- // ValidateEmail validates the email.
- func ValidateEmail(email string) bool {
- if _, err := mail.ParseAddress(email); err != nil {
- return false
- }
- return true
- }
- func GenUUID() string {
- return uuid.New().String()
- }
- func Min(x, y int) int {
- if x < y {
- return x
- }
- return y
- }
- var letters = []rune("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
- // RandomString returns a random string with length n.
- func RandomString(n int) (string, error) {
- var sb strings.Builder
- sb.Grow(n)
- for i := 0; i < n; i++ {
- // The reason for using crypto/rand instead of math/rand is that
- // the former relies on hardware to generate random numbers and
- // thus has a stronger source of random numbers.
- randNum, err := rand.Int(rand.Reader, big.NewInt(int64(len(letters))))
- if err != nil {
- return "", err
- }
- if _, err := sb.WriteRune(letters[randNum.Uint64()]); err != nil {
- return "", err
- }
- }
- return sb.String(), nil
- }
|