From fd1c5258e114898edae7bf67df9e1561052a0a5e Mon Sep 17 00:00:00 2001 From: dxfeng Date: Wed, 30 Jul 2025 10:31:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(portal):=20=E5=A2=9E=E5=8A=A0=E8=BA=AB?= =?UTF-8?q?=E4=BB=BD=E8=AF=81=E6=9C=89=E6=95=88=E6=9C=9F=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 checkValidity 方法,用于检查身份证有效期 - 在 IDCardRecognitionAction 类中集成该方法 - 优化代码结构,增加可读性和可维护性 --- .../action/entry/IDCardRecognitionAction.java | 86 ++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/weaver/seconddev/portal/action/entry/IDCardRecognitionAction.java b/src/main/java/com/weaver/seconddev/portal/action/entry/IDCardRecognitionAction.java index 8af72f1..b02bbf0 100644 --- a/src/main/java/com/weaver/seconddev/portal/action/entry/IDCardRecognitionAction.java +++ b/src/main/java/com/weaver/seconddev/portal/action/entry/IDCardRecognitionAction.java @@ -20,9 +20,11 @@ import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; +import java.nio.file.Files; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.time.LocalDate; @@ -103,7 +105,9 @@ public class IDCardRecognitionAction implements EsbServerlessRpcRemoteInterface } returnMap.put("issueAuthority", result.getString("签发机关")); - returnMap.put("validity", result.getString("有效期限")); + String validity = result.getString("有效期限"); + checkValidity(validity, returnMap); + returnMap.put("validity", validity); } } log.error("returnMap==" + JSON.toJSONString(returnMap)); @@ -205,4 +209,84 @@ public class IDCardRecognitionAction implements EsbServerlessRpcRemoteInterface return period.getYears(); } + + /** + * 检查有效期 + * + * @param validity + * @param returnMap + */ + private static void checkValidity(String validity, Map returnMap) { + if(StringUtils.isBlank(validity)){ + return; + } + String[] validityArr = validity.split("-"); + if (validityArr.length < 2) { + return; + } + String startDate = Convert.toStr(validityArr[0], "").replace(".", "-"); + String endDate = Convert.toStr(validityArr[1], "").replace(".", "-"); + returnMap.put("validity_type", "0"); + if ("长期".equals(endDate)) { + endDate = "9999-12-31"; + returnMap.put("validityType", "1"); + } + returnMap.put("validityStart", startDate); + returnMap.put("validityEnd", endDate); + } + + + + public static void main(String[] args) throws IOException { + // TODO + Map returnMap = new HashMap<>(); + File file = new File("C:\\Users\\dxfeng\\Desktop\\茶百道\\长期身份证.jpg"); + InputStream inputStream = Files.newInputStream(file.toPath()); + + //String response = callIdCardOcrApi(inputStream, file.getName()); + // 正面响应数据 + //String response = "{\"isSuccess\": true, \"data\": {\"page_num\": \"1\", \"result\": [{\"姓名\": \"王某某\", \"性别\": \"男\", \"民族\": \"汉\", \"出生\": \"1989年3月21日\", \"住址\": \"上海市浦东新区塘桥街道蓝村路xxx号\", \"公民身份号码\": \"370112198903217890\", \"标签\": \"头像面\"}]}, \"status_code\": 5200}"; + //String response = "{\"isSuccess\": true, \"data\": {\"page_num\": \"1\", \"result\": [{\"签发机关\": \"东港市公安局\", \"有效期限\": \"2014.07.09-长期\", \"标签\": \"国徽面\"}]}, \"status_code\": 5200}"; + String response = "{\"isSuccess\": true, \"data\": {\"page_num\": \"1\", \"result\": [{\"签发机关\": \"东港市公安局\", \"有效期限\": \"2013.03.05-2023.03.05\", \"标签\": \"国徽面\"}]}, \"status_code\": 5200}"; + System.out.println("response==" + response); + + JSONObject jsonObject = JSONObject.parseObject(response); + if (jsonObject.getBoolean("isSuccess")) { + JSONObject data = jsonObject.getJSONObject("data"); + JSONArray resultArray = data.getJSONArray("result"); + if (resultArray.size() > 0) { + JSONObject result = resultArray.getJSONObject(0); + returnMap.put("name", result.getString("姓名")); + returnMap.put("sex", result.getString("性别")); + String nation = result.getString("民族"); + //if (StringUtils.isNotBlank(nation) && StringUtils.isNotBlank(nationalityConvert)) { + // Long nationId = dataConvertMapper.getIdByName(baseParam, "nation", nation + "族"); + // log.error("nationId==" + nationId); + // nation = Convert.toStr(nationId, ""); + // log.error("nation==" + nation); + // + //} + returnMap.put("nation", nation); + + returnMap.put("birthday", Convert.toStr(result.getString("出生"), "").replace("年", "-").replace("月", "-").replace("日", "-")); + returnMap.put("address", result.getString("住址")); + String idNumber = result.getString("公民身份号码"); + returnMap.put("idCard", idNumber); + // 根据身份证号,计算年龄、 性别 + if (StringUtils.isNotBlank(idNumber)) { + returnMap.put("age", getAge(idNumber)); + returnMap.put("gender", getGender(idNumber)); + } + + returnMap.put("issueAuthority", result.getString("签发机关")); + String validity = result.getString("有效期限"); + checkValidity(validity, returnMap); + returnMap.put("validity", validity); + } + } + System.out.println("returnMap==" + JSON.toJSONString(returnMap)); + + + } + }