feat(portal): 增加身份证有效期检查功能

- 新增 checkValidity 方法,用于检查身份证有效期
- 在 IDCardRecognitionAction 类中集成该方法
- 优化代码结构,增加可读性和可维护性
This commit is contained in:
dxfeng 2025-07-30 10:31:53 +08:00
parent 9f3a40aade
commit fd1c5258e1
1 changed files with 85 additions and 1 deletions

View File

@ -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<String, Object> 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<String, Object> 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));
}
}