package tools import ( "crypto/md5" "crypto/rand" "crypto/sha256" "encoding/hex" "fmt" "math/big" "golang.org/x/crypto/bcrypt" ) // HashPassword 使用bcrypt加密密码 func HashPassword(password string) (string, error) { bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) return string(bytes), err } // CheckPassword 验证密码 func CheckPassword(password, hash string) bool { err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) return err == nil } // MD5 计算MD5哈希值 func MD5(text string) string { hash := md5.Sum([]byte(text)) return hex.EncodeToString(hash[:]) } // SHA256 计算SHA256哈希值 func SHA256(text string) string { hash := sha256.Sum256([]byte(text)) return hex.EncodeToString(hash[:]) } // GenerateRandomString 生成指定长度的随机字符串 func GenerateRandomString(length int) string { const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" b := make([]byte, length) for i := range b { num, _ := rand.Int(rand.Reader, big.NewInt(int64(len(charset)))) b[i] = charset[num.Int64()] } return string(b) } // GenerateRandomNumber 生成指定长度的随机数字字符串 func GenerateRandomNumber(length int) string { const charset = "0123456789" b := make([]byte, length) for i := range b { num, _ := rand.Int(rand.Reader, big.NewInt(int64(len(charset)))) b[i] = charset[num.Int64()] } return string(b) } // GenerateSMSCode 生成短信验证码 func GenerateSMSCode() string { return GenerateRandomNumber(6) } // GenerateOrderNo 生成订单号 func GenerateOrderNo(prefix string) string { timestamp := GetTimestamp() random := GenerateRandomNumber(6) return fmt.Sprintf("%s%d%s", prefix, timestamp, random) } // GeneratePaymentNo 生成支付单号 func GeneratePaymentNo() string { return GenerateOrderNo("PAY") } // GenerateRefundNo 生成退款单号 func GenerateRefundNo() string { return GenerateOrderNo("RF") } // GenerateTransferNo 生成调拨单号 func GenerateTransferNo() string { return GenerateOrderNo("TF") }