| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package utils
- import (
- "github.com/gogf/gf/crypto/gmd5"
- "github.com/gogf/gf/util/gconv"
- "reflect"
- "sort"
- "strings"
- )
- var USign *SignUtil
- func init() {
- USign = NewSignUtil()
- }
- type SignUtil struct {
- }
- func NewSignUtil() *SignUtil {
- return &SignUtil{}
- }
- func (s *SignUtil) Encryption(entity interface{}, suffix string) (string, error) {
- t := reflect.TypeOf(entity)
- v := reflect.ValueOf(entity)
- var signMap = make(map[string]interface{})
- for i := 0; i < t.NumField(); i++ {
- fieldType := t.Field(i)
- tag := fieldType.Tag.Get("sign")
- if tag != "" {
- signMap[tag] = v.Field(i).Interface()
- }
- }
- sign, err := s.SortJoin(signMap)
- if err != nil {
- }
- sign = sign + suffix
- sign, _ = gmd5.EncryptString(sign)
- return strings.ToUpper(sign), nil
- }
- func (s *SignUtil) SortJoin(eachMap map[string]interface{}) (string, error) {
- keys := make([]string, 0)
- for key, _ := range eachMap {
- keys = append(keys, key)
- }
- sort.Strings(keys)
- sign := ""
- for _, key := range keys {
- sign = sign + key + gconv.String(eachMap[key])
- }
- return sign, nil
- }
|