新增新个人和企业司法
This commit is contained in:
@@ -12,6 +12,7 @@ var customMessages = map[string]string{
|
||||
"ID.required": "id_card 是必填项",
|
||||
"ID.validID": "id 必须为有效的身份证号码",
|
||||
"TimeRange.validTimeRange": "time_range 必须为1到5的数字,表示年",
|
||||
"AuthDate.validAuthDate": "auth_date 日期范围格式必须为yyyyMMdd-yyyyMMdd,范围不超过5年,且当前时间必须在范围内",
|
||||
}
|
||||
|
||||
// 获取自定义错误消息
|
||||
|
||||
@@ -25,6 +25,11 @@ type FLXG0V3BRequest struct {
|
||||
IDCard string `json:"id_card" validate:"required,validIDCard"`
|
||||
Name string `json:"name" validate:"required,min=1,validName"`
|
||||
}
|
||||
type FLXG0V4BRequest struct {
|
||||
IDCard string `json:"id_card" validate:"required,validIDCard"`
|
||||
Name string `json:"name" validate:"required,min=1,validName"`
|
||||
AuthData string `json:"auth_data" validate:"required,validAuthData"`
|
||||
}
|
||||
type FLXG54F5Request struct {
|
||||
MobileNo string `json:"mobile_no" validate:"required,min=11,max=11,validMobileNo"`
|
||||
}
|
||||
@@ -114,6 +119,11 @@ type QYGL45BDRequest struct {
|
||||
type QYGL8261Request struct {
|
||||
EntName string `json:"ent_name" validate:"required,min=1,validName"`
|
||||
}
|
||||
type QYGL8271Request struct {
|
||||
EntName string `json:"ent_name" validate:"required,min=1,validName"`
|
||||
EntCode string `json:"ent_code" validate:"required,validUSCI"`
|
||||
AuthDate string `json:"auth_date" validate:"required,validAuthDate"`
|
||||
}
|
||||
type QYGLB4C0Request struct {
|
||||
IDCard string `json:"id_card" validate:"required,validIDCard"`
|
||||
}
|
||||
|
||||
@@ -4,9 +4,12 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/go-playground/validator/v10"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/go-playground/validator/v10"
|
||||
)
|
||||
|
||||
var validate *validator.Validate
|
||||
@@ -50,6 +53,11 @@ func init() {
|
||||
if err := validate.RegisterValidation("validMobileType", validMobileType); err != nil {
|
||||
panic(fmt.Sprintf("注册 validMobileType 验证器时发生错误: %v", err))
|
||||
}
|
||||
|
||||
// 注册自定义验证器 validAuthDate
|
||||
if err := validate.RegisterValidation("validAuthDate", validAuthDate); err != nil {
|
||||
panic(fmt.Sprintf("注册 validAuthDate 验证器时发生错误: %v", err))
|
||||
}
|
||||
}
|
||||
|
||||
// ValidateAndParse 封装了解密、解析和校验逻辑
|
||||
@@ -73,6 +81,54 @@ func ValidateAndParse(decryptData []byte, req interface{}) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func ValidateAuthDate(date string) error {
|
||||
// 校验日期格式是否为 yyyyMMdd-yyyyMMdd
|
||||
validDateRangePattern := `^\d{4}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])-\d{4}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$`
|
||||
matched, _ := regexp.MatchString(validDateRangePattern, date)
|
||||
if !matched {
|
||||
return errors.New("日期范围格式错误,应为yyyyMMdd-yyyyMMdd")
|
||||
}
|
||||
|
||||
// 分割开始和结束日期
|
||||
parts := strings.Split(date, "-")
|
||||
if len(parts) != 2 {
|
||||
return errors.New("日期范围格式错误,应为yyyyMMdd-yyyyMMdd")
|
||||
}
|
||||
|
||||
startDateStr, endDateStr := parts[0], parts[1]
|
||||
|
||||
// 解析开始日期
|
||||
startDate, err := time.Parse("20060102", startDateStr)
|
||||
if err != nil {
|
||||
return errors.New("开始日期格式错误")
|
||||
}
|
||||
|
||||
// 解析结束日期
|
||||
endDate, err := time.Parse("20060102", endDateStr)
|
||||
if err != nil {
|
||||
return errors.New("结束日期格式错误")
|
||||
}
|
||||
|
||||
// 校验开始日期不大于结束日期
|
||||
if startDate.After(endDate) {
|
||||
return errors.New("开始日期不能大于结束日期")
|
||||
}
|
||||
|
||||
// 校验时间范围不能超过5年
|
||||
maxDuration := 5 * 365 * 24 * time.Hour // 5年的近似时间(不考虑闰年)
|
||||
if endDate.Sub(startDate) > maxDuration {
|
||||
return errors.New("时间范围不能超过5年")
|
||||
}
|
||||
|
||||
// 校验当前时间在范围内
|
||||
now := time.Now()
|
||||
if now.Before(startDate) || now.After(endDate) {
|
||||
return errors.New("当前时间必须在指定的时间范围内")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取验证器实例
|
||||
func GetValidator() *validator.Validate {
|
||||
return validate
|
||||
@@ -154,3 +210,15 @@ func validMobileType(fl validator.FieldLevel) bool {
|
||||
|
||||
return validTypes[mobileType]
|
||||
}
|
||||
|
||||
// 自定义的日期范围验证器(用于结构体字段验证)
|
||||
func validAuthDate(fl validator.FieldLevel) bool {
|
||||
dateRange := fl.Field().String()
|
||||
// 如果是空字符串,认为是有效的(非必填项)
|
||||
if dateRange == "" {
|
||||
return true
|
||||
}
|
||||
|
||||
err := ValidateAuthDate(dateRange)
|
||||
return err == nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user