新增新个人和企业司法

This commit is contained in:
2025-03-18 22:07:42 +08:00
parent 30ef77f90c
commit d5200d00c9
12 changed files with 393 additions and 4 deletions

View File

@@ -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年且当前时间必须在范围内",
}
// 获取自定义错误消息

View File

@@ -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"`
}

View File

@@ -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
}