Browse Source

优化身份证号

夏文涛 1 năm trước cách đây
mục cha
commit
49c73635aa

+ 2 - 2
src/main/java/com/template/common/result/ResponseStatusEnum.java

@@ -35,8 +35,8 @@ public enum ResponseStatusEnum implements Code{
     SYSTEM_MONGO_TIMEOUT_ERROR(555, false, "Mongo连接超时"),
     SYSTEM_PHONE_ERROR(556,false,"手机号格式错误"),
     SYSTEM_SEND_PHONE_ERROR(557,false,"发送验证码失败"),
-    SYSTEM_TOKEN_ERROR(500,false,"token为空"),
-    SYSTEM_LOGIN_ERROR(500,false,"无效token"),
+    SYSTEM_TOKEN_ERROR(558,false,"token为空"),
+    SYSTEM_LOGIN_ERROR(558,false,"无效token"),
     PARAM_ERROR(560, false, "参数不能为空!"),
     GZH_ERROR(561, false, "设置失败,请先关联公众号!"),
     CAR_NUM_EXCEED(996, false, "预约车辆已超过上限,请更换日期后重试"),

+ 149 - 0
src/main/java/com/template/common/utils/CardUtils.java

@@ -0,0 +1,149 @@
+package com.template.common.utils;
+
+import org.springframework.util.StringUtils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * @Author: xwt
+ * @Date: 2025/7/3 星期四 11:36
+ * @Description: com.template.common.utils
+ * @Version: 1.0
+ */
+public class CardUtils {
+
+    /**
+     * 通过身份证号获取性别
+     * 1男 2女 0未知
+     *
+     * @param idCard
+     * @return
+     */
+    public static String getSexByIdCard(String idCard) {
+        if(!StringUtils.hasText(idCard)
+                && idCard.length() >= 17){
+            String sexStr = idCard.substring(16, 17);
+            int sexInt = Integer.parseInt(sexStr);
+            if(sexInt%2 == 0){//1男 2女 0未知
+                return "女";//女
+            }else{
+                return "男";//男
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 通过身份证号获取出生年月
+     *
+     * @param idCard
+     * @return
+     */
+    public static String getBirthdayByIdCard(String idCard) {
+        if(StringUtils.hasText(idCard)
+                && idCard.length() >= 14){
+            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+            String bornStr = idCard.substring(6, 10) +
+                    '-' + idCard.substring(10, 12) +
+                    '-' + idCard.substring(12, 14)
+                    ;
+            Date birthday = null;
+            try {
+                birthday = df.parse(bornStr);
+            } catch (ParseException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            return TimeExchange.DateToString(birthday,"yyyy-MM-dd") ;
+        }
+        return null;
+    }
+
+    /**
+     * 根据出生日期计算年龄
+     *
+     * @param birthDay
+     * @param nowDate
+     * @return
+     */
+    public static int getAgeByBirthDay(Date birthDay, Date nowDate) {
+        if(birthDay == null){
+            return -1;
+        }
+
+        //兼容不传比较时间
+        if(nowDate == null){
+            nowDate = new Date();
+        }
+
+        //开始
+        Calendar cal = Calendar.getInstance();//当前日期
+        Calendar cal2 = Calendar.getInstance();//出生日期
+        //当前日期(报名日期)
+        cal.setTime(nowDate);
+        int yearNow = cal.get(Calendar.YEAR);
+        int monthNow = cal.get(Calendar.MONTH);
+        int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
+        //出生日期
+        cal2.setTime(birthDay);
+        int yearBirth = cal2.get(Calendar.YEAR);
+        int monthBirth = cal2.get(Calendar.MONTH);
+        int dayOfMonthBirth = cal2.get(Calendar.DAY_OF_MONTH);
+        //当前日期 < 出生日期
+        if (cal.before(birthDay)) {
+            return -1;
+        }
+
+        //年龄
+        int age = yearNow - yearBirth;
+        if (monthNow <= monthBirth) {
+            if (monthNow == monthBirth) {
+                if (dayOfMonthNow < dayOfMonthBirth){
+                    age--;
+                }
+            } else {
+                age--;
+            }
+        }
+        //返回
+        return age;
+    }
+
+    /**
+     * 验证身份证号是否合法
+     *
+     * @param idCard
+     * @return
+     */
+    public static boolean validateIdCard(String idCard) {
+        // 对身份证号进行长度等简单判断
+        if(!StringUtils.hasText(idCard)
+                || idCard.length() != 18
+                || !idCard.matches("\\d{17}[0-9X]")
+        ){
+            return false;
+        }
+
+        // 1-17位相乘因子数组
+        int[] w = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
+        // 计算1-17位与相应因子乘积之和
+        char[] c = idCard.toCharArray();
+        int sum = 0;
+        for (int i = 0; i < w.length; i++) {
+            sum += (c[i] - '0') * w[i];
+        }
+        // 18位随机码数组
+        char[] verifyCode = "10X98765432".toCharArray();
+        char ch = verifyCode[sum % 11];
+
+        // 判断随机码是否相等
+        if(c[17] == ch){
+            return true;
+        }else{
+            return false;
+        }
+    }
+}

+ 1 - 1
src/main/java/com/template/controller/WelcomeBedController.java

@@ -826,7 +826,7 @@ public class WelcomeBedController implements WelcomeBedControllerAPI {
         List<BedDetailsVo> result = new ArrayList<>();
         WelcomeStudent student = welcomeStudentService.getDataByIdcard(studentCard);
         if(student == null){
-            return CommonResult.fail("当前学生信息已失效,查看失败");
+            return CommonResult.fail("558","当前学生信息已失效,查看失败");
         }
         //        获取未入住的床位
         List<BedInfosVo> beds = welcomeBedService.queryBedList(studentCard);

+ 52 - 8
src/main/java/com/template/controller/WelcomeStudentController.java

@@ -11,10 +11,7 @@ import com.baomidou.mybatisplus.extension.api.R;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.template.annotation.PassToken;
 import com.template.api.WelcomeStudentControllerAPI;
-import com.template.common.utils.ExcelUtils;
-import com.template.common.utils.JWTUtil;
-import com.template.common.utils.TimeExchange;
-import com.template.common.utils.paramUtils;
+import com.template.common.utils.*;
 import com.template.model.enumModel.eFileType;
 import com.template.model.enumModel.eProjectType;
 import com.template.model.enumModel.eSchool;
@@ -132,8 +129,24 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
         ws.setName(isr.getName());
         ws.setPicture(isr.getPicture());
         ws.setCardId(isr.getCardId());
-        ws.setSex(isr.getSex());
-        ws.setBirthday(isr.getBirthday());
+        //region 校验身份证号 并根据身份证号获取出生年月和性别
+        boolean isValidate = CardUtils.validateIdCard(isr.getCardId());//身份证是否合法
+        if(!isValidate){
+            return CommonResult.fail("身份证不合法");
+        }
+        String sex = CardUtils.getSexByIdCard(isr.getCardId());
+        if(!StringUtils.hasText(isr.getSex())){
+            ws.setSex(sex);
+        }else {
+            ws.setSex(isr.getSex());
+        }
+        String birthday = CardUtils.getBirthdayByIdCard(isr.getCardId());
+        if(!StringUtils.hasText(isr.getBirthday())){
+            ws.setBirthday(birthday);
+        }else {
+            ws.setBirthday(isr.getBirthday());
+        }
+        //endregion
         ws.setSchool(isr.getSchool());
         ws.setSchoolId(isr.getSchoolId());
         ws.setCollege(isr.getCollege());
@@ -170,6 +183,7 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
         ws.setZipCode(isr.getZipCode());
         ws.setRegisterOntime(isr.getRegisterOntime());
         ws.setIdenType(1);
+        ws.setIsPay(0);
         ws.setFillStatus("未填报");
         //ws.setAmountPayable(isr.getAmountPayable());
         //ws.setPayAmount(isr.getPayAmount());
@@ -908,6 +922,7 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
                     ws.setDistrictId(ws.getDistrictId());
                     ws.setAddress(ws.getAddress());
                     ws.setZipCode(ws.getZipCode());
+                    ws.setIsPay(0);
                 }
             }
         }
@@ -1038,6 +1053,20 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
                         String name = dataFormatter.formatCellValue(row.getCell(2));//姓名
                         studentData.setName(name);
                         String cardId = dataFormatter.formatCellValue(row.getCell(3));//身份证号
+                        //region 校验身份证号 并根据身份证号获取出生年月和性别
+                        boolean isValidate = CardUtils.validateIdCard(cardId);//身份证是否合法
+                        if(!isValidate){
+                            return CommonResult.fail("录取编号为" + assNum + "的身份证不合法");
+                        }
+                        String sex = CardUtils.getSexByIdCard(cardId);
+                        if(sex != null){
+                            studentData.setSex(sex);
+                        }
+                        String birthday = CardUtils.getBirthdayByIdCard(cardId);
+                        if(birthday != null){
+                            studentData.setBirthday(birthday);
+                        }
+                        //endregion
                         studentData.setCardId(cardId);
 
                         String school = dataFormatter.formatCellValue(row.getCell(4));//校区
@@ -1300,6 +1329,21 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
                         String name = dataFormatter.formatCellValue(row.getCell(2));//姓名
                         studentData.setName(name);
                         String cardId = dataFormatter.formatCellValue(row.getCell(3));//身份证号
+                        //region 校验身份证号 并根据身份证号获取出生年月和性别
+                        boolean isValidate = CardUtils.validateIdCard(cardId);//身份证是否合法
+                        if(!isValidate){
+                            return CommonResult.fail("录取编号为" + assNum + "的身份证不合法");
+                        }
+                        String sex = CardUtils.getSexByIdCard(cardId);
+                        if(sex != null){
+                            studentData.setSex(sex);
+                        }
+                        String birthday = CardUtils.getBirthdayByIdCard(cardId);
+                        if(birthday != null){
+                            studentData.setBirthday(birthday);
+                        }
+                        //endregion
+
                         studentData.setCardId(cardId);
 
                         String school = dataFormatter.formatCellValue(row.getCell(4));//校区
@@ -1616,7 +1660,7 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     public CommonResult queryStudentByToken(String userId) {
         WelcomeStudent student = welcomeStudentService.getManageById(Integer.valueOf(userId));
         if(student == null){
-            return CommonResult.fail("学生信息已失效,查询失败");
+            return CommonResult.fail("558","学生信息已失效,查询失败");
         }
 
         //家庭成员
@@ -1721,7 +1765,7 @@ public class WelcomeStudentController implements WelcomeStudentControllerAPI {
     public CommonResult queryStudentInfo(String admissNum) {
         WelcomeStudent ws = welcomeStudentService.getDataByNum(admissNum);
         if (ws == null) {
-            return CommonResult.fail("当前学生信息已失效,查询失败");
+            return CommonResult.fail("558","当前学生信息已失效,查询失败");
         }
 
         //家庭成员

+ 1 - 1
src/main/java/com/template/core/JwtAuthenticationInterceptor.java

@@ -83,7 +83,7 @@ public class JwtAuthenticationInterceptor implements HandlerInterceptor {
                 response.setContentType("application/json; charset=utf-8");
                 //response.setStatus(401);
                 JSONObject res = new JSONObject();
-                res.put("code", 500);
+                res.put("code", 558);
                 res.put("message",  "登录凭证已过期,请重新登录!");
                 res.put("success", false);
                 PrintWriter out = null;