@@ -0,0 +1,131 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"crypto/rand"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"os"
|
||||
"regexp"
|
||||
"time"
|
||||
)
|
||||
|
||||
func Unix_to_str_time(nanos int64) string {
|
||||
t := time.Unix(0, nanos)
|
||||
return (t.Format("2006-01-02 15:04:05.999999999")) // 输出:2021-06-10 09:49:59.123456789
|
||||
}
|
||||
|
||||
// 获取当前时间字符串
|
||||
// 参数格式可选,默认"2006-01-02 15:04:05"
|
||||
func Get_current_time_string(format ...string) string {
|
||||
// 默认格式
|
||||
layout := "2006_01_02-15_04_05.999999999"
|
||||
|
||||
// 如果传入了格式参数则使用自定义格式
|
||||
if len(format) > 0 {
|
||||
layout = format[0]
|
||||
}
|
||||
|
||||
return time.Now().Format(layout)
|
||||
}
|
||||
|
||||
func Time_date_str_to_time(timestr string) time.Time {
|
||||
|
||||
// 定义与字符串匹配的布局(注意必须使用Go的参考时间格式)
|
||||
layout := "2006-01-02"
|
||||
|
||||
// 解析时间
|
||||
t, err := time.Parse(layout, timestr)
|
||||
if err != nil {
|
||||
var notime time.Time
|
||||
|
||||
return notime
|
||||
}
|
||||
|
||||
return t
|
||||
|
||||
}
|
||||
|
||||
// 判断文件是否存在
|
||||
func File_exists(path string) bool {
|
||||
_, err := os.Stat(path)
|
||||
if err != nil {
|
||||
return !os.IsNotExist(err)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func Is_email_valid(email string) bool {
|
||||
// 正则表达式(覆盖 99% 常见邮箱格式)
|
||||
pattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`
|
||||
regex := regexp.MustCompile(pattern)
|
||||
return regex.MatchString(email)
|
||||
}
|
||||
|
||||
func Valid_str_len(s string, min, max int, checkRune bool) bool {
|
||||
var length int
|
||||
if checkRune {
|
||||
length = len([]rune(s))
|
||||
} else {
|
||||
length = len(s)
|
||||
}
|
||||
|
||||
if min < 0 || max < 0 || (max != 0 && max < min) {
|
||||
return false // 参数非法
|
||||
}
|
||||
|
||||
return length >= min && (max == 0 || length <= max)
|
||||
|
||||
// 示例
|
||||
//valid1 := Valid_str_len("hello", 3, 20, false) // 校验字节数
|
||||
//valid2 := Valid_str_len("你好", 1, 2, true) // 校验字符数
|
||||
}
|
||||
|
||||
func Rand_str_32() string {
|
||||
// 生成 32 字节 (256 位) 随机数据
|
||||
b := make([]byte, 32)
|
||||
if _, err := rand.Read(b); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// 转换为 16 进制字符串 (长度 64)
|
||||
cookie := hex.EncodeToString(b)
|
||||
return cookie
|
||||
}
|
||||
|
||||
func Md5_str(str string) string {
|
||||
hashBytes2 := md5.Sum([]byte(str))
|
||||
hashString2 := hex.EncodeToString(hashBytes2[:]) // 注意数组转切片的[:]
|
||||
return hashString2
|
||||
}
|
||||
|
||||
func Hash_user_pass(str string) string {
|
||||
switch User_configs["pass_hash_type"].(string) {
|
||||
case "text":
|
||||
return str
|
||||
case "md5":
|
||||
return Md5_str(str)
|
||||
}
|
||||
|
||||
return Get_current_time_string() + Rand_str_32() //如果转换失败返回当前时间,避免撞库
|
||||
}
|
||||
|
||||
func Page_range(start_page int64, end_page int64, now_page int64, href_heard string) []map[string]string {
|
||||
var a []map[string]string
|
||||
|
||||
for i := start_page; i <= end_page; i++ {
|
||||
var active = ""
|
||||
if i == now_page {
|
||||
active = "active"
|
||||
} else {
|
||||
active = ""
|
||||
}
|
||||
a = append(a, map[string]string{
|
||||
"page_href": fmt.Sprintf("%s%d", href_heard, i),
|
||||
"active": active,
|
||||
"page": fmt.Sprintf("%d", i),
|
||||
})
|
||||
}
|
||||
|
||||
return a
|
||||
}
|
||||
Reference in New Issue
Block a user