package main import ( "bytes" "fmt" "regexp" "strings" jsoniter "github.com/json-iterator/go" ) type User struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email"` } func main() { // user := User{ // Name: "John Doe", // Age: 30, // Email: "john@example.com", // } // // 调用函数 // params := StructToMap(user) // // 打印结果 // fmt.Println(params["age"]) fmt.Println(IsValidIDCard("452224200009060026")) } // IsValidIDCard 检查身份证号是否合法 func IsValidIDCard(idCard string) bool { if len(idCard) != 18 { return false } // 前 17 位必须为数字 for i := 0; i < 17; i++ { if idCard[i] < '0' || idCard[i] > '9' { return false } } // 最后一位可以是数字或 'X' 或 'x' lastChar := idCard[17] if (lastChar < '0' || lastChar > '9') && lastChar != 'X' && lastChar != 'x' { return false } // 加权因子 weight := []int{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2} // 校验码对应值 checkCodes := []rune{'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'} // 计算校验和 sum := 0 for i := 0; i < 17; i++ { sum += int(idCard[i]-'0') * weight[i] } // 计算校验码索引 index := sum % 11 // 比较校验码 expectedCheckCode := checkCodes[index] if lastChar != byte(expectedCheckCode) && lastChar != byte(expectedCheckCode+32) { return false } return true } // UnderlineToCamel 下划线命名转驼峰命名 func UnderlineToCamel(str string) string { re := regexp.MustCompile(`_(\w)`) return re.ReplaceAllStringFunc(str, func(s string) string { return strings.ToUpper(string(s[1])) }) } // CamelToUnderline 驼峰命名转下划线命名 func CamelToUnderline(str string) string { re := regexp.MustCompile(`([A-Z])`) return strings.ToLower(re.ReplaceAllString(str, "_$1"))[1:] } func StructToMap(params any) map[string]any { mapParams := map[string]interface{}{} jsonParams, err := jsoniter.Marshal(params) if err != nil { return mapParams } if err := jsoniter.Unmarshal(jsonParams, &mapParams); err != nil { return mapParams } return mapParams } func StrUppercase(str string) string { str = strings.Title(str) re := regexp.MustCompile(`_(\w)`) result := re.ReplaceAllStringFunc(str, func(s string) string { return "_" + strings.ToUpper(string(s[1])) }) result = strings.ReplaceAll(result, "_", "") return result } func CamelCase(s string) string { if s == "" { return "" } t := make([]byte, 0, 32) i := 0 if s[0] == '_' { t = append(t, 'X') i++ } for ; i < len(s); i++ { c := s[i] if c == '_' && i+1 < len(s) && isASCIIUpper(s[i+1]) { continue } if isASCIIDigit(c) { t = append(t, c) continue } if isASCIIUpper(c) { c ^= ' ' } t = append(t, c) for i+1 < len(s) && isASCIIUpper(s[i+1]) { i++ t = append(t, '_') t = append(t, bytes.ToLower([]byte{s[i]})[0]) } } return string(t) } // 是否是大写字母 func isASCIIUpper(c byte) bool { return 'A' <= c && c <= 'Z' } // 是否是数字 func isASCIIDigit(c byte) bool { return '0' <= c && c <= '9' }