2023-02-16 15:28:15 +08:00
|
|
|
|
package com.zhgd.xmgl.util;
|
|
|
|
|
|
|
|
|
|
|
|
import cn.hutool.http.HttpRequest;
|
|
|
|
|
|
import cn.hutool.json.JSONUtil;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @program: wisdomSite
|
|
|
|
|
|
* @description: 身份证工具类
|
|
|
|
|
|
* @author: Mr.Peng
|
|
|
|
|
|
* @create: 2021-03-10 10:04
|
|
|
|
|
|
**/
|
|
|
|
|
|
@Component
|
|
|
|
|
|
@Slf4j
|
|
|
|
|
|
public class IdCardUtils {
|
|
|
|
|
|
|
|
|
|
|
|
private static String tokenurl = "https://iam.cn-east-3.myhuaweicloud.com/v3/auth/tokens";
|
|
|
|
|
|
private static String username;
|
|
|
|
|
|
private static String domainname;
|
|
|
|
|
|
private static String password;
|
|
|
|
|
|
private static String projectid;
|
|
|
|
|
|
private static String endpoint;
|
2023-04-01 23:10:33 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 是否启用华为云账号功能
|
|
|
|
|
|
*/
|
|
|
|
|
|
private static Boolean enable;
|
|
|
|
|
|
|
2023-04-04 14:45:10 +08:00
|
|
|
|
@Value("${hw-ocr-enable:false}")
|
2023-04-01 23:10:33 +08:00
|
|
|
|
public void setEnable(Boolean enable) {
|
|
|
|
|
|
IdCardUtils.enable = enable;
|
|
|
|
|
|
}
|
2023-02-16 15:28:15 +08:00
|
|
|
|
|
|
|
|
|
|
@Value("${hw-ocr-username}")
|
|
|
|
|
|
public void setUsername(String hwusername) {
|
|
|
|
|
|
username = hwusername;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${hw-ocr-domainname}")
|
|
|
|
|
|
public void setDomainname(String hwdomainname) {
|
|
|
|
|
|
domainname = hwdomainname;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${hw-ocr-password}")
|
|
|
|
|
|
public void setPassword(String hwpassword) {
|
|
|
|
|
|
password = hwpassword;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${hw-ocr-projectid}")
|
|
|
|
|
|
public void setProjectid(String hwprojectid) {
|
|
|
|
|
|
projectid = hwprojectid;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Value("${hw-ocr-endpoint}")
|
|
|
|
|
|
public void setEndpoint(String hwendpoint) {
|
|
|
|
|
|
endpoint = hwendpoint;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2023-04-01 23:10:33 +08:00
|
|
|
|
|
2023-02-16 15:28:15 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 识别身份证信息
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param imageurl 图片地址
|
|
|
|
|
|
* @param side true 正面(头像面) false 反面(国徽面)
|
|
|
|
|
|
* <p>
|
|
|
|
|
|
* 注意事项:此处申请华为云必须在华为云上海一区开通身份证识别功能,然后拷贝项目ID到此处进行识别
|
|
|
|
|
|
*/
|
|
|
|
|
|
public static String getIdCardInfo(String imageurl, boolean side) {
|
2023-04-01 23:10:33 +08:00
|
|
|
|
if (enable) {
|
2023-02-16 15:28:15 +08:00
|
|
|
|
// String JSONSTR = "{ \n \"auth\": { \n \"identity\": { \n \"methods\": [ \n \"password\" \n ], \n \"password\": { \n \"user\": { \n\"name\": \"" + username + "\", \n \"password\": \"" + password + "\", \n \"domain\": { \n \"name\": \"" + domainname + "\" \n } \n } \n} \n}, \n\"scope\": { \n \"project\": { \n\"name\": \"cn-east-3\" \n} \n} \n} \n}";
|
|
|
|
|
|
// String token = HttpRequest.post(tokenurl).body(String.valueOf(JSONUtil.parse(JSONSTR))).execute().header("X-Subject-Token");
|
|
|
|
|
|
// String url = "https://ocr.cn-east-3.myhuaweicloud.com/v2/" + projectid + "/ocr/id-card";
|
|
|
|
|
|
// Map<String, Object> param = new HashMap<>();
|
|
|
|
|
|
// param.put("url", imageurl);
|
|
|
|
|
|
// param.put("side", side ? "front" : "back");
|
|
|
|
|
|
// String result = HttpRequest.post(url).header("X-Auth-Token", token).body(String.valueOf(JSONUtil.parse(param))).execute().body();
|
|
|
|
|
|
// log.info(result);
|
|
|
|
|
|
// return result;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// String tokenurl = "https://iam.cn-east-3.myhuaweicloud.com/v3/auth/tokens";
|
|
|
|
|
|
// String JSONSTR = "{ \n \"auth\": { \n \"identity\": { \n \"methods\": [ \n \"password\" \n ], \n \"password\": { \n \"user\": { \n\"name\": \"" + username + "\", \n \"password\": \"" + password + "\", \n \"domain\": { \n \"name\": \"" + username + "\" \n } \n } \n} \n}, \n\"scope\": { \n \"project\": { \n\"name\": \"cn-east-3\" \n} \n} \n} \n}";
|
2023-04-01 23:10:33 +08:00
|
|
|
|
//获取token
|
|
|
|
|
|
String tokenUrl = "https://iam." + endpoint + ".myhuaweicloud.com/v3/auth/tokens";
|
|
|
|
|
|
String JSONSTR = getTokenStr(domainname, username, password, endpoint);
|
|
|
|
|
|
String tokenBody = JSONUtil.toJsonStr(JSONSTR);
|
|
|
|
|
|
log.info("token_url:{},body:{}", tokenUrl, tokenBody);
|
|
|
|
|
|
String token = HttpRequest.post(tokenUrl).body(tokenBody).execute().header("x-subject-token");
|
|
|
|
|
|
log.info("response-token:{}", token);
|
|
|
|
|
|
|
|
|
|
|
|
//获取身份证信息
|
|
|
|
|
|
String cardUrl = "https://ocr." + endpoint + ".myhuaweicloud.com/v2/" + projectid + "/ocr/id-card";
|
|
|
|
|
|
Map<String, Object> param = new HashMap<>();
|
|
|
|
|
|
param.put("url", imageurl);
|
|
|
|
|
|
param.put("side", side ? "front" : "back");
|
|
|
|
|
|
String cardBoday = JSONUtil.toJsonStr(param);
|
|
|
|
|
|
log.info("token_url:{},body:{}", cardUrl, cardBoday);
|
|
|
|
|
|
String result = HttpRequest.post(cardUrl).header("x-auth-token", token).body(cardBoday).execute().body();
|
|
|
|
|
|
log.info(result);
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
return null;
|
2023-02-16 15:28:15 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static String getTokenStr(String domainname, String username, String passwrd, String endpoint) {
|
|
|
|
|
|
JSONObject domain = new JSONObject();
|
|
|
|
|
|
domain.put("name", domainname);
|
|
|
|
|
|
JSONObject user = new JSONObject();
|
|
|
|
|
|
user.put("name", username);
|
|
|
|
|
|
user.put("password", passwrd);
|
|
|
|
|
|
user.put("domain", domain);
|
|
|
|
|
|
JSONObject password = new JSONObject();
|
|
|
|
|
|
password.put("user", user);
|
|
|
|
|
|
List<String> methods = new ArrayList();
|
|
|
|
|
|
methods.add("password");
|
|
|
|
|
|
JSONObject identity = new JSONObject();
|
|
|
|
|
|
identity.put("methods", methods);
|
|
|
|
|
|
identity.put("password", password);
|
|
|
|
|
|
|
|
|
|
|
|
JSONObject project = new JSONObject();
|
|
|
|
|
|
project.put("name", endpoint);
|
|
|
|
|
|
JSONObject scope = new JSONObject();
|
|
|
|
|
|
scope.put("project", project);
|
|
|
|
|
|
|
|
|
|
|
|
JSONObject json = new JSONObject();
|
|
|
|
|
|
json.put("identity", identity);
|
|
|
|
|
|
json.put("scope", scope);
|
|
|
|
|
|
|
|
|
|
|
|
JSONObject data = new JSONObject();
|
|
|
|
|
|
data.put("auth", json);
|
|
|
|
|
|
return data.toJSONString();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 通过身份证号码获取出生日期(birthday)、年龄(age)、性别(sex)
|
|
|
|
|
|
*
|
|
|
|
|
|
* @param idCardNo 身份证号码
|
|
|
|
|
|
* @return 返回的出生日期格式:1993-05-07 性别格式:1男,2女
|
|
|
|
|
|
*/
|
|
|
|
|
|
public static Map<String, String> getBirthdayAgeSex(String idCardNo) {
|
|
|
|
|
|
String birthday = "";
|
|
|
|
|
|
String age = "";
|
|
|
|
|
|
String sexCode = "";
|
|
|
|
|
|
|
|
|
|
|
|
int year = Calendar.getInstance().get(Calendar.YEAR);
|
|
|
|
|
|
char[] number = idCardNo.toCharArray();
|
|
|
|
|
|
boolean flag = true;
|
|
|
|
|
|
if (number.length == 15) {
|
|
|
|
|
|
for (int x = 0; x < number.length; x++) {
|
|
|
|
|
|
if (!flag) {
|
|
|
|
|
|
return new HashMap<String, String>();
|
|
|
|
|
|
}
|
|
|
|
|
|
flag = Character.isDigit(number[x]);
|
|
|
|
|
|
}
|
|
|
|
|
|
} else if (number.length == 18) {
|
|
|
|
|
|
for (int x = 0; x < number.length - 1; x++) {
|
|
|
|
|
|
if (!flag) {
|
|
|
|
|
|
return new HashMap<String, String>();
|
|
|
|
|
|
}
|
|
|
|
|
|
flag = Character.isDigit(number[x]);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (flag && idCardNo.length() == 15) {
|
|
|
|
|
|
birthday = "19" + idCardNo.substring(6, 8) + "-"
|
|
|
|
|
|
+ idCardNo.substring(8, 10) + "-"
|
|
|
|
|
|
+ idCardNo.substring(10, 12);
|
|
|
|
|
|
sexCode = Integer.parseInt(idCardNo.substring(idCardNo.length() - 3, idCardNo.length())) % 2 == 0 ? "2" : "1";
|
|
|
|
|
|
age = (year - Integer.parseInt("19" + idCardNo.substring(6, 8))) + "";
|
|
|
|
|
|
} else if (flag && idCardNo.length() == 18) {
|
|
|
|
|
|
birthday = idCardNo.substring(6, 10) + "-"
|
|
|
|
|
|
+ idCardNo.substring(10, 12) + "-"
|
|
|
|
|
|
+ idCardNo.substring(12, 14);
|
|
|
|
|
|
sexCode = Integer.parseInt(idCardNo.substring(idCardNo.length() - 4, idCardNo.length() - 1)) % 2 == 0 ? "2" : "1";
|
|
|
|
|
|
age = (year - Integer.parseInt(idCardNo.substring(6, 10))) + "";
|
|
|
|
|
|
}
|
|
|
|
|
|
Map<String, String> map = new HashMap<String, String>();
|
|
|
|
|
|
map.put("birthday", birthday);
|
|
|
|
|
|
map.put("age", age);
|
|
|
|
|
|
map.put("sex", sexCode);
|
|
|
|
|
|
return map;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
|
String projectid = "0c9c4261fa80f43b2fdbc0103360d790";
|
|
|
|
|
|
String domainname = "yunhaiyun";
|
|
|
|
|
|
String username = "hqocr";
|
|
|
|
|
|
String password = "hq123456";
|
|
|
|
|
|
String endpoint = "cn-north-4";
|
|
|
|
|
|
String imageurl = "http://119.29.110.58:9000/itbgp/file/3b097a48-7e46-407c-9e32-fc725204c485.jpg";
|
|
|
|
|
|
String JSONSTR = getTokenStr(domainname, username, password, endpoint);
|
|
|
|
|
|
String token = HttpRequest.post("https://iam." + endpoint + ".myhuaweicloud.com/v3/auth/tokens").body(JSONUtil.toJsonStr(JSONSTR)).execute().header("x-subject-token");
|
|
|
|
|
|
log.info(token);
|
|
|
|
|
|
String url = "https://ocr." + endpoint + ".myhuaweicloud.com/v2/" + projectid + "/ocr/id-card";
|
|
|
|
|
|
Map<String, Object> param = new HashMap<>();
|
|
|
|
|
|
param.put("url", imageurl);
|
|
|
|
|
|
param.put("side", "front");
|
|
|
|
|
|
String result = HttpRequest.post(url).header("x-auth-token", token).body(JSONUtil.toJsonStr(param)).execute().body();
|
|
|
|
|
|
log.info(result);
|
|
|
|
|
|
}
|
|
|
|
|
|
/*public static void main(String[] args) {
|
|
|
|
|
|
String username="hqocr";
|
|
|
|
|
|
String domain="yunhaiyun";
|
|
|
|
|
|
String password="hq123456";
|
|
|
|
|
|
String projectid="0c9c4261fa80f43b2fdbc0103360d790";
|
|
|
|
|
|
String imageurl="http://119.29.110.58:9000/itbgp/file/3b097a48-7e46-407c-9e32-fc725204c485.jpg";
|
|
|
|
|
|
String JSONSTR=getTokenStr(domain,username,password,"cn-north-4");
|
|
|
|
|
|
|
|
|
|
|
|
String token = HttpRequest.post("https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens").body(JSONUtil.toJsonStr(JSONSTR)).execute().header("x-subject-token");
|
|
|
|
|
|
log.info(token);
|
|
|
|
|
|
}*/
|
|
|
|
|
|
}
|