-
Notifications
You must be signed in to change notification settings - Fork 3
/
lib.go
131 lines (110 loc) · 2.36 KB
/
lib.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package lib
import (
"bytes"
"crypto/md5"
"encoding/gob"
"encoding/hex"
"fmt"
"math/rand"
"strconv"
"strings"
"time"
)
//create md5 string
func Strtomd5(s string) string {
h := md5.New()
h.Write([]byte(s))
rs := hex.EncodeToString(h.Sum(nil))
return rs
}
//password hash function
func Pwdhash(str string) string {
return Strtomd5(str)
}
func StringsToJson(str string) string {
rs := []rune(str)
jsons := ""
for _, r := range rs {
rint := int(r)
if rint < 128 {
jsons += string(r)
} else {
jsons += "\\u" + strconv.FormatInt(int64(rint), 16) // json
}
}
return jsons
}
//生成32位md5字串
func GetMd5String(s string) string {
h := md5.New()
h.Write([]byte(s))
return strings.ToUpper(hex.EncodeToString(h.Sum(nil)))
}
//得到当前时间
func GetCurrentTime() string {
return time.Now().Format("20060102150405")
}
//生成OTP
func GenerateOTP() string {
nums := generateRandomNumber(100000, 999999, 1)
return fmt.Sprintf("%d", nums[0])
}
//生成OTP Sequence Number
func GenerateSequenceNumberForOTP(otp string) string {
return GetMd5String(otp)
}
//生成Security token
func GenerateSecurityToken(mobileNumber string) string {
return GetMd5String(mobileNumber + GetCurrentTime())
}
//生成count个[start,end)结束的不重复的随机数
func generateRandomNumber(start int, end int, count int) []int {
//范围检查
if end < start || (end-start) < count {
return nil
}
//存放结果的slice
nums := make([]int, 0)
//随机数生成器,加入时间戳保证每次生成的随机数不一样
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for len(nums) < count {
//生成随机数
num := r.Intn((end - start)) + start
//查重
exist := false
for _, v := range nums {
if v == num {
exist = true
break
}
}
if !exist {
nums = append(nums, num)
}
}
return nums
}
//生成订单号
//REQ: 询价单
//RES: 报价单
//TRX: 订单
func GenerateOrderNumber(purchaseType string) string {
nums := generateRandomNumber(10000, 99999, 1)
return purchaseType + GetCurrentTime() + fmt.Sprintf("%d", nums[0])
}
func ConvertStrToInt(s string) int {
i, err := strconv.Atoi(s)
if err != nil {
i = 0
}
return i
}
func GetBytes(key interface{}) ([]byte, error) {
var buf bytes.Buffer
enc := gob.NewEncoder(&buf)
err := enc.Encode(key)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
}