util.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package gopay
  2. import (
  3. "math/rand"
  4. "strconv"
  5. "strings"
  6. "time"
  7. )
  8. type BodyMap map[string]interface{}
  9. //设置参数
  10. func (bm BodyMap) Set(key string, value interface{}) {
  11. bm[key] = value
  12. }
  13. //获取参数
  14. func (bm BodyMap) Get(key string) string {
  15. if bm == nil {
  16. return null
  17. }
  18. v, ok := bm[key]
  19. if !ok {
  20. return null
  21. }
  22. value, ok := v.(int)
  23. if ok {
  24. value := strconv.Itoa(value)
  25. return value
  26. }
  27. return v.(string)
  28. }
  29. //删除参数
  30. func (bm BodyMap) Remove(key string) {
  31. delete(bm, key)
  32. }
  33. //获取随机字符串
  34. // length:字符串长度
  35. func GetRandomString(length int) string {
  36. str := "0123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
  37. b := []byte(str)
  38. var result []byte
  39. r := rand.New(rand.NewSource(time.Now().UnixNano()))
  40. for i := 0; i < length; i++ {
  41. result = append(result, b[r.Intn(len(b))])
  42. }
  43. return string(result)
  44. }
  45. func convert2String(value interface{}) (valueStr string) {
  46. switch v := value.(type) {
  47. case int:
  48. valueStr = Int2String(v)
  49. case int64:
  50. valueStr = Int642String(v)
  51. case float64:
  52. valueStr = Float64ToString(v)
  53. case float32:
  54. valueStr = Float32ToString(v)
  55. case string:
  56. valueStr = v
  57. default:
  58. valueStr = null
  59. }
  60. return
  61. }
  62. //解析时间
  63. func ParseDateTime(timeStr string) (datetime time.Time) {
  64. datetime, _ = time.ParseInLocation(TimeLayout, timeStr, time.Local)
  65. return
  66. }
  67. //格式化Datetime
  68. func FormatDateTime(timeStr string) (formatTime string) {
  69. //2019-01-04T15:40:00Z
  70. //2019-01-18 20:51:30+08:00
  71. if timeStr == null {
  72. return null
  73. }
  74. replace := strings.Replace(timeStr, "T", " ", 1)
  75. formatTime = replace[:19]
  76. return
  77. }
  78. //格式化
  79. func FormatDate(dateStr string) (formatDate string) {
  80. //2020-12-30T00:00:00+08:00
  81. if dateStr == null {
  82. return null
  83. }
  84. split := strings.Split(dateStr, "T")
  85. formatDate = split[0]
  86. return
  87. }
  88. //字符串转Float
  89. func String2Float(floatStr string) (floatNum float64) {
  90. floatNum, _ = strconv.ParseFloat(floatStr, 64)
  91. return
  92. }
  93. //Float64转字符串
  94. // floatNum:float64数字
  95. // prec:精度位数(不传则默认float数字精度)
  96. func Float64ToString(floatNum float64, prec ...int) (floatStr string) {
  97. if len(prec) > 0 {
  98. floatStr = strconv.FormatFloat(floatNum, 'f', prec[0], 64)
  99. return
  100. }
  101. floatStr = strconv.FormatFloat(floatNum, 'f', -1, 64)
  102. return
  103. }
  104. //Float32转字符串
  105. // floatNum:float32数字
  106. // prec:精度位数(不传则默认float数字精度)
  107. func Float32ToString(floatNum float32, prec ...int) (floatStr string) {
  108. if len(prec) > 0 {
  109. floatStr = strconv.FormatFloat(float64(floatNum), 'f', prec[0], 32)
  110. return
  111. }
  112. floatStr = strconv.FormatFloat(float64(floatNum), 'f', -1, 32)
  113. return
  114. }
  115. //字符串转Int
  116. func String2Int(intStr string) (intNum int) {
  117. intNum, _ = strconv.Atoi(intStr)
  118. return
  119. }
  120. //字符串转Int64
  121. func String2Int64(intStr string) (int64Num int64) {
  122. intNum, _ := strconv.Atoi(intStr)
  123. int64Num = int64(intNum)
  124. return
  125. }
  126. //Int转字符串
  127. func Int2String(intNum int) (intStr string) {
  128. intStr = strconv.Itoa(intNum)
  129. return
  130. }
  131. //Int64转字符串
  132. func Int642String(intNum int64) (int64Str string) {
  133. //10, 代表10进制
  134. int64Str = strconv.FormatInt(intNum, 10)
  135. return
  136. }
  137. //解密填充模式(去除补全码) PKCS7UnPadding
  138. //解密时,需要在最后面去掉加密时添加的填充byte
  139. func PKCS7UnPadding(plainText []byte) []byte {
  140. length := len(plainText)
  141. unpadding := int(plainText[length-1]) //找到Byte数组最后的填充byte
  142. return plainText[:(length - unpadding)] //只截取返回有效数字内的byte数组
  143. }
  144. //解密填充模式(去除补全码) PKCS5UnPadding
  145. //解密时,需要在最后面去掉加密时添加的填充byte
  146. func PKCS5UnPadding(origData []byte) []byte {
  147. length := len(origData)
  148. unpadding := int(origData[length-1]) //找到Byte数组最后的填充byte
  149. return origData[:(length - unpadding)] //只截取返回有效数字内的byte数组
  150. }