123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- package lib
- import (
- "crypto/md5"
- "encoding/hex"
- "fmt"
- "math"
- "math/rand"
- "strconv"
- "strings"
- "time"
- )
- // #取得随机字符串:通过打乱slice来操作
- func GetRandstring(length int, char string, rand_x int64) string {
- if length < 1 {
- return ""
- }
- if len(char) <= 6 || len(char) <= length {
- char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
- }
- charArr := strings.Split(char, "")
- ran := rand.New(rand.NewSource(time.Now().Unix() + rand_x))
- l := len(charArr)
- for i := l - 1; i > 0; i-- {
- r := ran.Intn(i)
- charArr[r], charArr[i] = charArr[i], charArr[r]
- }
- rchar := charArr[:length]
- return strings.Join(rchar, "")
- }
- // 返回一个32位md5加密后的字符串
- func Md5(str string) string {
- h := md5.New()
- h.Write([]byte(str))
- return hex.EncodeToString(h.Sum(nil))
- }
- // 转化
- func TimeStrToTime(T_time string) (time.Time, bool) {
- stamp, err := time.Parse("2006-01-02 15:04:05", T_time)
- if err != nil {
- return time.Time{}, false
- }
- return stamp, true
- }
- // 转化
- func DateStrToDate(T_date string) (time.Time, bool) {
- stamp, err := time.Parse("2006-01-02", T_date)
- if err != nil {
- return time.Time{}, false
- }
- return stamp, true
- }
- func SplitStringIds(str string, prefix string) (r []string) {
- if len(str) == 0 {
- return
- }
- Ids_str := strings.TrimRight(str, "|")
- Ids := strings.Split(Ids_str, "|")
- for _, v := range Ids {
- r = append(r, strings.TrimLeft(v, prefix))
- }
- return r
- }
- func SplitStringToDotStr(str string, prefix string) (r string) {
- Ids_str := strings.TrimRight(str, "|")
- Ids := strings.Split(Ids_str, "|")
- for _, v := range Ids {
- r += strings.TrimLeft(v, prefix) + ","
- }
- r = strings.TrimRight(r, ",")
- return r
- }
- func SplitStringToIntIds(str string, prefix string) (r []int) {
- Ids_str := strings.TrimRight(str, "|")
- Ids := strings.Split(Ids_str, "|")
- for _, v := range Ids {
- id, _ := strconv.Atoi(strings.TrimLeft(v, prefix))
- r = append(r, id)
- }
- return r
- }
- func IntIdsDistinct(Ids []int) (result []int) {
- distinctMap := make(map[int]int, len(Ids))
- for _, Id := range Ids {
- if _, ok := distinctMap[Id]; !ok {
- distinctMap[Id] = 1
- result = append(result, Id)
- }
- }
- return result
- }
- func StringListToDotStr(str []string) (r string) {
- //for _, v := range str {
- // r += v + ","
- //}
- //r = strings.TrimRight(r, ",")
- return strings.Join(str, ",")
- }
- func IntListToDotStr(list []int) (r string) {
- for _, v := range list {
- r += fmt.Sprintf("%d,", v)
- }
- r = strings.TrimRight(r, ",")
- return r
- }
- // ["a","b","c"] ==> "'a','b','c'"
- func StringListToQuotesDotStr(str []string) (r string) {
- for _, v := range str {
- r += fmt.Sprintf("'%s',", v)
- }
- r = strings.TrimRight(r, ",")
- return r
- }
- // 四舍五入保留小数点后几位
- func RoundToDecimal(num float64, decimalPlaces int) float64 {
- shift := math.Pow(10, float64(decimalPlaces))
- return math.Round(num*shift) / shift
- }
- // 检查sn是否都相同
- // 2023103074298131,0|2023143741715643,0|
- func IsSNAllSame(T_snid string) (string, []int, bool) {
- entries := strings.Split(strings.Trim(T_snid, "|"), "|")
- if len(entries) == 1 {
- fields := strings.Split(entries[0], ",")
- if len(fields) == 2 {
- return fields[0], []int{To_int(fields[1])}, true // 只有一个条目时,认为全相同
- } else {
- return "", []int{}, false
- }
- }
- firstSN := ""
- ids := []int{}
- for _, entry := range entries {
- fields := strings.Split(entry, ",")
- if len(fields) == 2 {
- currSN := fields[0]
- ids = append(ids, To_int(fields[1]))
- if firstSN == "" {
- firstSN = currSN
- } else if currSN != firstSN {
- return "", []int{}, false // 发现不相同的 SN 值,直接返回 false
- }
- }
- }
- return firstSN, ids, true
- }
|