|
@@ -20,7 +20,6 @@ import (
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
-// 随机数种子
|
|
|
var rnd = rand.New(rand.NewSource(time.Now().UnixNano()))
|
|
|
|
|
|
func GetRandString(size int) string {
|
|
@@ -57,24 +56,20 @@ func StringsToJSON(str string) string {
|
|
|
return jsons
|
|
|
}
|
|
|
|
|
|
-// 序列化
|
|
|
func ToString(v interface{}) string {
|
|
|
data, _ := json.Marshal(v)
|
|
|
return string(data)
|
|
|
}
|
|
|
|
|
|
-// md5加密
|
|
|
func MD5(data string) string {
|
|
|
m := md5.Sum([]byte(data))
|
|
|
return hex.EncodeToString(m[:])
|
|
|
}
|
|
|
|
|
|
-// 获取数字随机字符
|
|
|
func GetRandDigit(n int) string {
|
|
|
return fmt.Sprintf("%0"+strconv.Itoa(n)+"d", rnd.Intn(int(math.Pow10(n))))
|
|
|
}
|
|
|
|
|
|
-// 获取随机数
|
|
|
func GetRandNumber(n int) int {
|
|
|
return rnd.Intn(n)
|
|
|
}
|
|
@@ -91,14 +86,12 @@ func GetToday(format string) string {
|
|
|
return today
|
|
|
}
|
|
|
|
|
|
-// 获取今天剩余秒数
|
|
|
func GetTodayLastSecond() time.Duration {
|
|
|
today := GetToday(FormatDate) + " 23:59:59"
|
|
|
end, _ := time.ParseInLocation(FormatDateTime, today, time.Local)
|
|
|
return time.Duration(end.Unix()-time.Now().Local().Unix()) * time.Second
|
|
|
}
|
|
|
|
|
|
-// 处理出生日期函数
|
|
|
func GetBrithDate(idcard string) string {
|
|
|
l := len(idcard)
|
|
|
var s string
|
|
@@ -113,7 +106,6 @@ func GetBrithDate(idcard string) string {
|
|
|
return GetToday(FormatDate)
|
|
|
}
|
|
|
|
|
|
-// 处理性别
|
|
|
func WhichSexByIdcard(idcard string) string {
|
|
|
var sexs = [2]string{"女", "男"}
|
|
|
length := len(idcard)
|
|
@@ -127,7 +119,6 @@ func WhichSexByIdcard(idcard string) string {
|
|
|
return "男"
|
|
|
}
|
|
|
|
|
|
-// 截取小数点后几位
|
|
|
func SubFloatToString(f float64, m int) string {
|
|
|
n := strconv.FormatFloat(f, 'f', -1, 64)
|
|
|
if n == "" {
|
|
@@ -146,14 +137,12 @@ func SubFloatToString(f float64, m int) string {
|
|
|
return newn[0] + "." + newn[1][:m]
|
|
|
}
|
|
|
|
|
|
-// 截取小数点后几位
|
|
|
func SubFloatToFloat(f float64, m int) float64 {
|
|
|
newn := SubFloatToString(f, m)
|
|
|
newf, _ := strconv.ParseFloat(newn, 64)
|
|
|
return newf
|
|
|
}
|
|
|
|
|
|
-// 获取相差时间-年
|
|
|
func GetYearDiffer(start_time, end_time string) int {
|
|
|
t1, _ := time.ParseInLocation("2006-01-02", start_time, time.Local)
|
|
|
t2, _ := time.ParseInLocation("2006-01-02", end_time, time.Local)
|
|
@@ -164,7 +153,6 @@ func GetYearDiffer(start_time, end_time string) int {
|
|
|
return age
|
|
|
}
|
|
|
|
|
|
-// 获取相差时间-秒
|
|
|
func GetSecondDifferByTime(start_time, end_time time.Time) int64 {
|
|
|
diff := end_time.Unix() - start_time.Unix()
|
|
|
return diff
|
|
@@ -176,7 +164,6 @@ func FixFloat(f float64, m int) float64 {
|
|
|
return newf
|
|
|
}
|
|
|
|
|
|
-// 将字符串数组转化为逗号分割的字符串形式 ["str1","str2","str3"] >>> "str1,str2,str3"
|
|
|
func StrListToString(strList []string) (str string) {
|
|
|
if len(strList) > 0 {
|
|
|
for k, v := range strList {
|
|
@@ -191,38 +178,26 @@ func StrListToString(strList []string) (str string) {
|
|
|
return ""
|
|
|
}
|
|
|
|
|
|
-// Token
|
|
|
-//func GetToken() string {
|
|
|
-// randStr := GetRandString(64)
|
|
|
-// token := MD5(randStr + Md5Key)
|
|
|
-// tokenLen := 64 - len(token)
|
|
|
-// return strings.ToUpper(token + GetRandString(tokenLen))
|
|
|
-//}
|
|
|
|
|
|
-// 数据没有记录
|
|
|
func ErrNoRow() string {
|
|
|
return "<QuerySeter> no row found"
|
|
|
}
|
|
|
|
|
|
-// 校验邮箱格式
|
|
|
func ValidateEmailFormatat(email string) bool {
|
|
|
reg := regexp.MustCompile(RegularEmail)
|
|
|
return reg.MatchString(email)
|
|
|
}
|
|
|
|
|
|
-// 验证是否是手机号
|
|
|
func ValidateMobileFormatat(mobileNum string) bool {
|
|
|
reg := regexp.MustCompile(RegularMobile)
|
|
|
return reg.MatchString(mobileNum)
|
|
|
}
|
|
|
|
|
|
-// 判断文件是否存在
|
|
|
func FileIsExist(filePath string) bool {
|
|
|
_, err := os.Stat(filePath)
|
|
|
return err == nil || os.IsExist(err)
|
|
|
}
|
|
|
|
|
|
-// 获取图片扩展名
|
|
|
func GetImgExt(file string) (ext string, err error) {
|
|
|
var headerByte []byte
|
|
|
headerByte = make([]byte, 8)
|
|
@@ -265,17 +240,13 @@ func GetImgExt(file string) (ext string, err error) {
|
|
|
return ext, nil
|
|
|
}
|
|
|
|
|
|
-// 保存图片
|
|
|
func SaveImage(path string, img image.Image) (err error) {
|
|
|
- //需要保持的文件
|
|
|
imgfile, err := os.Create(path)
|
|
|
defer imgfile.Close()
|
|
|
- // 以PNG格式保存文件
|
|
|
err = png.Encode(imgfile, img)
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
-// 保存base64数据为文件
|
|
|
func SaveBase64ToFile(content, path string) error {
|
|
|
data, err := base64.StdEncoding.DecodeString(content)
|
|
|
if err != nil {
|
|
@@ -302,7 +273,6 @@ func SaveBase64ToFileBySeek(content, path string) (err error) {
|
|
|
return err
|
|
|
}
|
|
|
n, _ := f.Seek(0, 2)
|
|
|
- // 从末尾的偏移量开始写入内容
|
|
|
_, err = f.WriteAt([]byte(data), n)
|
|
|
defer f.Close()
|
|
|
} else {
|
|
@@ -311,7 +281,6 @@ func SaveBase64ToFileBySeek(content, path string) (err error) {
|
|
|
return err
|
|
|
}
|
|
|
n, _ := f.Seek(0, 2)
|
|
|
- // 从末尾的偏移量开始写入内容
|
|
|
_, err = f.WriteAt([]byte(data), n)
|
|
|
defer f.Close()
|
|
|
}
|
|
@@ -345,7 +314,6 @@ func PageCount(count, pagesize int) int {
|
|
|
}
|
|
|
|
|
|
func TrimHtml(src string) string {
|
|
|
- //将HTML标签全转换成小写
|
|
|
re, _ := regexp.Compile("\\<[\\S\\s]+?\\>")
|
|
|
src = re.ReplaceAllStringFunc(src, strings.ToLower)
|
|
|
|
|
@@ -359,8 +327,6 @@ func TrimHtml(src string) string {
|
|
|
return strings.TrimSpace(src)
|
|
|
}
|
|
|
|
|
|
-//1556164246 -> 2019-04-25 03:50:46 +0000
|
|
|
-//timestamp
|
|
|
|
|
|
func TimeToTimestamp() {
|
|
|
fmt.Println(time.Unix(1556164246, 0).Format("2006-01-02 15:04:05"))
|
|
@@ -396,7 +362,6 @@ func toFixed(num float64, precision int) float64 {
|
|
|
return float64(round(num*output)) / output
|
|
|
}
|
|
|
|
|
|
-// GetWilsonScore returns Wilson Score
|
|
|
func GetWilsonScore(p, n float64) float64 {
|
|
|
if p == 0 && n == 0 {
|
|
|
return 0
|
|
@@ -405,7 +370,6 @@ func GetWilsonScore(p, n float64) float64 {
|
|
|
return toFixed(((p+1.9208)/(p+n)-1.96*math.Sqrt(p*n/(p+n)+0.9604)/(p+n))/(1+3.8416/(p+n)), 2)
|
|
|
}
|
|
|
|
|
|
-// 将中文数字转化成数字,比如 第三百四十五章,返回第345章 不支持一亿及以上
|
|
|
func ChangeWordsToNum(str string) (numStr string) {
|
|
|
words := ([]rune)(str)
|
|
|
num := 0
|
|
@@ -534,19 +498,12 @@ func GetMaxTradeCode(tradeCode string) (maxTradeCode string, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
-// excel日期字段格式化 yyyy-mm-dd
|
|
|
func ConvertToFormatDay(excelDaysString string) string {
|
|
|
- // 2006-01-02 距离 1900-01-01的天数
|
|
|
baseDiffDay := 38719 //在网上工具计算的天数需要加2天,什么原因没弄清楚
|
|
|
curDiffDay := excelDaysString
|
|
|
b, _ := strconv.Atoi(curDiffDay)
|
|
|
- // 获取excel的日期距离2006-01-02的天数
|
|
|
realDiffDay := b - baseDiffDay
|
|
|
- //fmt.Println("realDiffDay:",realDiffDay)
|
|
|
- // 距离2006-01-02 秒数
|
|
|
realDiffSecond := realDiffDay * 24 * 3600
|
|
|
- //fmt.Println("realDiffSecond:",realDiffSecond)
|
|
|
- // 2006-01-02 15:04:05距离1970-01-01 08:00:00的秒数 网上工具可查出
|
|
|
baseOriginSecond := 1136185445
|
|
|
resultTime := time.Unix(int64(baseOriginSecond+realDiffSecond), 0).Format("2006-01-02")
|
|
|
return resultTime
|