sign_util.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package utils
  2. import (
  3. "github.com/gogf/gf/crypto/gmd5"
  4. "github.com/gogf/gf/util/gconv"
  5. "reflect"
  6. "sort"
  7. "strings"
  8. )
  9. var USign *SignUtil
  10. func init() {
  11. USign = NewSignUtil()
  12. }
  13. type SignUtil struct {
  14. }
  15. func NewSignUtil() *SignUtil {
  16. return &SignUtil{}
  17. }
  18. func (s *SignUtil) Encryption(entity interface{}, suffix string) (string, error) {
  19. t := reflect.TypeOf(entity)
  20. v := reflect.ValueOf(entity)
  21. var signMap = make(map[string]interface{})
  22. for i := 0; i < t.NumField(); i++ {
  23. fieldType := t.Field(i)
  24. tag := fieldType.Tag.Get("sign")
  25. if tag != "" {
  26. signMap[tag] = v.Field(i).Interface()
  27. }
  28. }
  29. sign, err := s.SortJoin(signMap)
  30. if err != nil {
  31. }
  32. sign = sign + suffix
  33. sign, _ = gmd5.EncryptString(sign)
  34. return strings.ToUpper(sign), nil
  35. }
  36. func (s *SignUtil) SortJoin(eachMap map[string]interface{}) (string, error) {
  37. keys := make([]string, 0)
  38. for key, _ := range eachMap {
  39. keys = append(keys, key)
  40. }
  41. sort.Strings(keys)
  42. sign := ""
  43. for _, key := range keys {
  44. sign = sign + key + gconv.String(eachMap[key])
  45. }
  46. return sign, nil
  47. }