You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

IdCardUtils.java 3.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package io.renren.util;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Map;
  5. import org.apache.http.Header;
  6. import org.apache.http.HttpResponse;
  7. import org.apache.http.HttpStatus;
  8. import org.apache.http.NameValuePair;
  9. import org.apache.http.client.HttpClient;
  10. import org.apache.http.client.entity.UrlEncodedFormEntity;
  11. import org.apache.http.client.methods.HttpPost;
  12. import org.apache.http.impl.client.HttpClients;
  13. import org.apache.http.message.BasicNameValuePair;
  14. import org.apache.http.util.EntityUtils;
  15. import org.slf4j.Logger;
  16. import org.slf4j.LoggerFactory;
  17. import com.alibaba.fastjson.JSONObject;
  18. /**
  19. * 身份证识别
  20. * 重要提示如下:
  21. * 身份证OCR识别文档地址:https://market.aliyun.com/products/57124001/cmapi00051896.html
  22. * 完整版请从 https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java 下载
  23. *
  24. * 相应的依赖请参照
  25. * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
  26. */
  27. public class IdCardUtils {
  28. private static Logger logger = LoggerFactory.getLogger(IdCardUtils.class); // 日志记录
  29. private static final String URL = "https://sidocr.market.alicloudapi.com/ocr/idcard";
  30. private static final String APPCODE = "6698454b70fa4f32af372006912e9a67";
  31. public static String doPost(Map<String, String> bodys) throws Exception {
  32. String result = null;
  33. HttpClient httpClient = HttpClients.createDefault();
  34. HttpPost httpPost = new HttpPost(URL);
  35. try {
  36. httpPost.addHeader("Authorization", "APPCODE " + APPCODE);
  37. httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
  38. if (bodys != null) {
  39. List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();
  40. for (String key : bodys.keySet()) {
  41. nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));
  42. }
  43. UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");
  44. formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
  45. httpPost.setEntity(formEntity);
  46. }
  47. HttpResponse response = httpClient.execute(httpPost);
  48. if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
  49. //String temp = "{\"msg\":\"\",\"orderno\":\"973627429421580288\",\"code\":200,\"data\":{\"birthday\":\"1996年11月24日\",\"idcard\":\"123456199611245678\",\"sex\":\"男\",\"issue\":\"区县级公安局名称\",\"address\":\"大庆市大庆区大庆路1号样例\",\"name\":\"小易\",\"nation\":\"汉\",\"expirydate\":\"\"}}";
  50. JSONObject parseObject = JSONObject.parseObject(EntityUtils.toString(response.getEntity(), "utf-8"));
  51. if(parseObject.get("code") != null && parseObject.getString("code").equals("200")) {
  52. result = parseObject.getString("data");
  53. //IDCardVo vo = JSONObject.parseObject(parseObject.getString("data"), IDCardVo.class);
  54. //System.out.println(vo);
  55. }else {
  56. logger.error("调用身份证识别接口失败:"+ parseObject.get("msg"));
  57. return null;
  58. }
  59. }else {
  60. logger.error("调用身份证识别接口失败:返回信息");
  61. logger.error("----------------");
  62. Header[] allHeaders = response.getAllHeaders();//X-Ca-Error-Message
  63. for (Header header : allHeaders) {
  64. logger.error(header.getName() + ":" + header.getValue());
  65. }
  66. logger.error("----------------");
  67. }
  68. } catch (Exception e) {
  69. logger.error("调用身份证识别接口异常:", e);
  70. } finally {
  71. httpPost.releaseConnection();
  72. }
  73. return result;
  74. }
  75. }