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 }