package utils import ( "crypto/hmac" "crypto/sha1" "encoding/base64" "fmt" "math" "math/rand" "strconv" "strings" "time" ) /* RandomString 产生随机数 - size 随机码的位数 - kind 0 // 纯数字 1 // 小写字母 2 // 大写字母 3 // 数字、大小写字母 */ func RandomString(size int, kind int) string { iKind, kinds, rsBytes := kind, [][]int{[]int{10, 48}, []int{26, 97}, []int{26, 65}}, make([]byte, size) isAll := kind > 2 || kind < 0 rand.Seed(time.Now().UnixNano()) for i := 0; i < size; i++ { if isAll { // random iKind iKind = rand.Intn(3) } scope, base := kinds[iKind][0], kinds[iKind][1] rsBytes[i] = uint8(base + rand.Intn(scope)) } return string(rsBytes) } func GetUserSha1Pass(pass, salt string) string { key := []byte(salt) mac := hmac.New(sha1.New, key) mac.Write([]byte(pass)) //进行base64编码 res := base64.StdEncoding.EncodeToString(mac.Sum(nil)) return res } // GetMilepost 里程桩加减里程,返回里程桩 func GetMilepost(start, num, upDown string) string { arr := strings.Split(start, "+") var ( kilometre, meter, milepost, counter, res, resMilepost, resMeter float64 ) if len(arr) == 1 { meter = 0 } else { meter, _ = strconv.ParseFloat(arr[1], 64) } str := strings.Replace(arr[0], "k", "", -1) str = strings.Replace(str, "K", "", -1) kilometre, _ = strconv.ParseFloat(str, 64) milepost = kilometre + meter/1000 counter, _ = strconv.ParseFloat(num, 64) if upDown == "D" { res = milepost - counter } else { res = milepost + counter } resMilepost = math.Floor(res) resMeter = (res - resMilepost) * 100 return fmt.Sprintf("K%d+%.2f", int(resMilepost), resMeter) }