You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.0 KiB
53 lines
1.0 KiB
package id
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
|
|
"github.com/bwmarrin/snowflake"
|
|
uuid "github.com/google/uuid"
|
|
"github.com/rs/xid"
|
|
)
|
|
|
|
// xid
|
|
func NewXId() string {
|
|
id := xid.New()
|
|
return id.String()
|
|
}
|
|
|
|
// uuid
|
|
func NewUUId() string {
|
|
u1 := uuid.New()
|
|
return u1.String()
|
|
}
|
|
|
|
// 带分组Id
|
|
func NewSnowflakeId(group int64) string {
|
|
node, _ := snowflake.NewNode(group) //groupID 映射为 node
|
|
id := node.Generate().String()
|
|
return id
|
|
}
|
|
|
|
// 解析 Snowflake ID 获取 NodeID(即你设置的 groupID)
|
|
func GetNodeIDFromSnowflakeID(id snowflake.ID) int64 {
|
|
return int64((id >> 12) & 0x3FF) // 取出第 12-21 位(共 10 位)的 NodeID
|
|
}
|
|
|
|
// 获取id 的分组
|
|
func GetSnowflakeId(str string) (group int64, err error) {
|
|
var (
|
|
id snowflake.ID
|
|
)
|
|
if id, err = snowflake.ParseString(str); err != nil {
|
|
return
|
|
}
|
|
group = int64((id >> 12) & 0x3FF)
|
|
return
|
|
}
|
|
|
|
// 根据字符串生成唯一id
|
|
func GenerateSHA256ID(input string) string {
|
|
hash := sha256.New()
|
|
hash.Write([]byte(input))
|
|
return hex.EncodeToString(hash.Sum(nil))
|
|
}
|
|
|