mirror of
https://github.com/weloe/token-go.git
synced 2025-10-05 15:36:50 +08:00
61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
package util
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/base64"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func GenerateUUID() (string, error) {
|
|
uuid := make([]byte, 16)
|
|
_, err := rand.Read(uuid)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
// set version number (4)
|
|
uuid[6] = (uuid[6] & 0x0f) | 0x40
|
|
// set variant bits (2)
|
|
uuid[8] = (uuid[8] & 0xbf) | 0x80
|
|
|
|
return fmt.Sprintf("%x-%x-%x-%x-%x", uuid[0:4], uuid[4:6], uuid[6:8], uuid[8:10], uuid[10:]), nil
|
|
}
|
|
|
|
func GenerateSimpleUUID() (string, error) {
|
|
uuid, err := GenerateUUID()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return strings.ReplaceAll(uuid, "-", ""), nil
|
|
}
|
|
|
|
func GenerateRandomString32() (string, error) {
|
|
data := make([]byte, 24)
|
|
_, err := rand.Read(data)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return base64.URLEncoding.EncodeToString(data)[:32], nil
|
|
}
|
|
|
|
func GenerateRandomString64() (string, error) {
|
|
data := make([]byte, 48)
|
|
_, err := rand.Read(data)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return base64.URLEncoding.EncodeToString(data)[:64], nil
|
|
}
|
|
|
|
func GenerateRandomString128() (string, error) {
|
|
data := make([]byte, 96)
|
|
_, err := rand.Read(data)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return base64.URLEncoding.EncodeToString(data)[:128], nil
|
|
}
|