From 4e928d78a7c3aa9d38ecedbb999ae191964daee6 Mon Sep 17 00:00:00 2001 From: quyixiao <2621048238@qq.com> Date: Tue, 15 Apr 2025 20:36:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../heyu/api/data/dto/IdCardAddressModel.java | 12 +- .../api/data/utils/IDCardValidatorUtils.java | 21 ++- .../com/heyu/api/data/utils/MobileUtils.java | 20 --- .../IdCardOCRVerificationController.java | 3 +- .../resp/card/IdCardOCRVerificationResp.java | 15 +- .../src/test/java/com/api/test/Demo.java | 147 ++++++++++++++++++ 6 files changed, 187 insertions(+), 31 deletions(-) create mode 100644 api-web/api-interface/src/test/java/com/api/test/Demo.java diff --git a/api-mapper/src/main/java/com/heyu/api/data/dto/IdCardAddressModel.java b/api-mapper/src/main/java/com/heyu/api/data/dto/IdCardAddressModel.java index f568cdf..8dca807 100644 --- a/api-mapper/src/main/java/com/heyu/api/data/dto/IdCardAddressModel.java +++ b/api-mapper/src/main/java/com/heyu/api/data/dto/IdCardAddressModel.java @@ -2,12 +2,10 @@ package com.heyu.api.data.dto; import lombok.Data; -import java.util.Map; - @Data public class IdCardAddressModel { - public IdCardAddressModel(String p, String c, String co, int s){ + public IdCardAddressModel(String p, String c, String co, int s,String birthday){ province = p; city = c; county = co; @@ -17,6 +15,9 @@ public class IdCardAddressModel { }else{ sexChar = "女"; } + + this.birthday = birthday; + } @@ -50,4 +51,9 @@ public class IdCardAddressModel { * */ String sexChar; + /*** + * 生日 + */ + private String birthday; + } diff --git a/api-mapper/src/main/java/com/heyu/api/data/utils/IDCardValidatorUtils.java b/api-mapper/src/main/java/com/heyu/api/data/utils/IDCardValidatorUtils.java index cebbf9f..927d8ed 100644 --- a/api-mapper/src/main/java/com/heyu/api/data/utils/IDCardValidatorUtils.java +++ b/api-mapper/src/main/java/com/heyu/api/data/utils/IDCardValidatorUtils.java @@ -4117,8 +4117,17 @@ public class IDCardValidatorUtils { }}; + + public static IdCardAddressModel getAddrInfo(String idCard){ String p = idCard.substring(0, 2); + String a = idCard.substring(6, 13); + + String birthday = a ; + if(a.length()==8){ + birthday = a.substring(0,4) + "-" + a.substring(4,6) + "-" + a.substring(6,8); + } + if (idCardCodeMap.containsKey(p)) { IdCardCodeModel province = idCardCodeMap.get(p); String c = idCard.substring(2, 4); @@ -4129,9 +4138,9 @@ public class IDCardValidatorUtils { if (city.codeMap.containsKey(d)) { IdCardCodeModel district = city.codeMap.get(d); - return new IdCardAddressModel(province.getName(), city.getName(), district.getName(), sex); + return new IdCardAddressModel(province.getName(), city.getName(), district.getName(), sex,birthday); }else{ - return new IdCardAddressModel(province.getName(), city.getName(), "", sex); + return new IdCardAddressModel(province.getName(), city.getName(), "", sex,birthday); } } } @@ -4156,7 +4165,11 @@ public class IDCardValidatorUtils { public static void main(String[] args) { - System.out.println(getAddrInfo("430529199209255030")); - + String a = "19920925"; + String b = a.substring(0,4) + "-" + a.substring(4,6) + "-" + a.substring(6,8); + System.out.println(a.length()); + System.out.println(b); } + + } diff --git a/api-mapper/src/main/java/com/heyu/api/data/utils/MobileUtils.java b/api-mapper/src/main/java/com/heyu/api/data/utils/MobileUtils.java index 7ac3da3..f059ef8 100644 --- a/api-mapper/src/main/java/com/heyu/api/data/utils/MobileUtils.java +++ b/api-mapper/src/main/java/com/heyu/api/data/utils/MobileUtils.java @@ -1,7 +1,6 @@ package com.heyu.api.data.utils; -import com.heyu.api.data.dto.IdCardAddressModel; import com.heyu.api.data.dto.IdCardCodeModel; import java.util.HashMap; @@ -44,26 +43,7 @@ public class MobileUtils { }}; - public static IdCardAddressModel getAddrInfo(String idCard){ - String p = idCard.substring(0, 2); - if (idCardCodeMap.containsKey(p)) { - IdCardCodeModel province = idCardCodeMap.get(p); - String c = idCard.substring(2, 4); - if (province.codeMap.containsKey(c)) { - IdCardCodeModel city = province.codeMap.get(c); - String d = idCard.substring(4, 6); - int sex = Integer.parseInt(idCard.substring(16, 17)) % 2; - if (city.codeMap.containsKey(d)) { - IdCardCodeModel district = city.codeMap.get(d); - return new IdCardAddressModel(province.getName(), city.getName(), district.getName(), sex); - }else{ - return new IdCardAddressModel(province.getName(), city.getName(), "", sex); - } - } - } - return null; - } public static boolean validateMobile(String phone) { return phone.matches(CHINA_PHONE_NUMBER_REGEX); diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/idcard/IdCardOCRVerificationController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/idcard/IdCardOCRVerificationController.java index 508bdd2..4d311f9 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/idcard/IdCardOCRVerificationController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/idcard/IdCardOCRVerificationController.java @@ -66,7 +66,9 @@ public class IdCardOCRVerificationController { idCardOCRVerificationResp.setArea(idCardAddressModel.getCounty()); idCardOCRVerificationResp.setDetailAddress(idCardAddressModel.getProvince() + idCardAddressModel.getCity() + idCardAddressModel.getCounty()); + idCardOCRVerificationResp.setBirthday(idCardAddressModel.getBirthday()); idCardOCRVerificationResp.setSex(idCardAddressModel.getSex()); + idCardOCRVerificationResp.setSexChar(idCardAddressModel.getSexChar()); idCardOCRVerificationResp.setDesc("姓名和身份证号一致"); } else if ("-1".equals(idCardOCRVerificationResponse.getResult())) { @@ -82,7 +84,6 @@ public class IdCardOCRVerificationController { idCardOCRVerificationResp.setDesc(idCardOCRVerificationResponse.getDescription()); //其他情况 } - idCardOCRVerificationResp.setIdCardNumber(apiIdentityCardRequest.getIdCardNumber()); idCardOCRVerificationResp.setRealName(apiIdentityCardRequest.getRealName()); return R.ok().setData(idCardOCRVerificationResp); diff --git a/api-web/api-interface/src/main/java/com/heyu/api/resp/card/IdCardOCRVerificationResp.java b/api-web/api-interface/src/main/java/com/heyu/api/resp/card/IdCardOCRVerificationResp.java index fbcf094..cb41d6b 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/resp/card/IdCardOCRVerificationResp.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/resp/card/IdCardOCRVerificationResp.java @@ -62,14 +62,23 @@ public class IdCardOCRVerificationResp { - - - /*** * 性别:0男 1女 */ private Integer sex = 0; + /*** + * 生日 + */ + private String birthday; + + + + /** + * 性别描述 + * */ + private String sexChar; + } diff --git a/api-web/api-interface/src/test/java/com/api/test/Demo.java b/api-web/api-interface/src/test/java/com/api/test/Demo.java new file mode 100644 index 0000000..579cb28 --- /dev/null +++ b/api-web/api-interface/src/test/java/com/api/test/Demo.java @@ -0,0 +1,147 @@ +package com.api.test; + + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.NoSuchAlgorithmException; +import java.text.SimpleDateFormat; +import java.util.*; + + +class Demo { + public static String calcAuthorization(String secretId, String secretKey, String datetime) + throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException { + String signStr = "x-date: " + datetime; + Mac mac = Mac.getInstance("HmacSHA1"); + Key sKey = new SecretKeySpec(secretKey.getBytes("UTF-8"), mac.getAlgorithm()); + mac.init(sKey); + byte[] hash = mac.doFinal(signStr.getBytes("UTF-8")); + //String sig = new Base64Encoder().encode(hash); + + + Base64.Encoder encoder = Base64.getMimeEncoder(); + String sig= encoder.encodeToString(hash); + + + + String auth = "{\"id\":\"" + secretId + "\", \"x-date\":\"" + datetime + "\", \"signature\":\"" + sig + "\"}"; + return auth; + } + + public static String urlencode(Map map) throws UnsupportedEncodingException { + StringBuilder sb = new StringBuilder(); + for (Map.Entry entry : map.entrySet()) { + if (sb.length() > 0) { + sb.append("&"); + } + sb.append(String.format("%s=%s", + URLEncoder.encode(entry.getKey().toString(), "UTF-8"), + URLEncoder.encode(entry.getValue().toString(), "UTF-8") + )); + } + return sb.toString(); + } + + public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException { + //云市场分配的密钥Id + String secretId = "32GyIZXijjQqtaTx"; + //云市场分配的密钥Key + String secretKey = "8drHlKmmphKWNxEidbRDMbV9zA3WX8Cn"; + + Calendar cd = Calendar.getInstance(); + SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US); + sdf.setTimeZone(TimeZone.getTimeZone("GMT")); + String datetime = sdf.format(cd.getTime()); + // 签名 + String auth = calcAuthorization(secretId, secretKey, datetime); + // 请求方法 + String method = "POST"; + // 请求头 + String uuid = UUID.randomUUID().toString(); + Map headers = new HashMap(); + headers.put("request-id", uuid); + headers.put("Authorization", auth); + + // 查询参数 + Map queryParams = new HashMap(); + + // body参数 + Map bodyParams = new HashMap(); + //bodyParams.put("cardNo","430529199209255030"); + //bodyParams.put("realName","瞿贻晓"); + + //bodyParams.put("cardNo","360428198505100418"); + //bodyParams.put("realName","吴林"); + + + bodyParams.put("cardNo","360311199303080027"); + bodyParams.put("realName","胡凯敏"); + String bodyParamStr = urlencode(bodyParams); + + // url参数拼接 + String url = "https://ap-beijing.cloudmarket-apigw.com/service-18c38npd/idcard/VerifyIdcardv2"; + if (!queryParams.isEmpty()) { + url += "?" + urlencode(queryParams); + } + + BufferedReader in = null; + try { + URL realUrl = new URL(url); + HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection(); + conn.setConnectTimeout(5000); + conn.setReadTimeout(5000); + conn.setRequestMethod(method); + + // request headers + for (Map.Entry entry : headers.entrySet()) { + conn.setRequestProperty(entry.getKey(), entry.getValue()); + } + + // request body + Map methods = new HashMap<>(); + methods.put("POST", true); + methods.put("PUT", true); + methods.put("PATCH", true); + Boolean hasBody = methods.get(method); + if (hasBody != null) { + conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + + conn.setDoOutput(true); + DataOutputStream out = new DataOutputStream(conn.getOutputStream()); + out.writeBytes(bodyParamStr); + out.flush(); + out.close(); + } + + // 定义 BufferedReader输入流来读取URL的响应 + in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String line; + String result = ""; + while ((line = in.readLine()) != null) { + result += line; + } + + System.out.println(result); + } catch (Exception e) { + System.out.println(e); + e.printStackTrace(); + } finally { + try { + if (in != null) { + in.close(); + } + } catch (Exception e2) { + e2.printStackTrace(); + } + } + } +} \ No newline at end of file