参看文:阿里的资料
https://market.aliyun.com/products/57124001/cmapi010401.html?spm=5176.8243888.554823.2.wXf26h#sku=yuncode440100000

执行 AliOcrIdcard.java就可以了!

package com.zct.yfq.client.fddsignature.action;

import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.HashMap;import java.util.Map;

import org.apache.commons.codec.binary.Base64;import org.apache.http.HttpResponse;import org.apache.http.util.EntityUtils;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;

/** * A阿里云-数据服务_5_1_身份证识别 * @author 张绪定 * */public class AliOcrIdcard {

   public static void main(String[] args) {      // TODO Auto-generated method stub        AliOcrIdcard aliOcrIdcard=new AliOcrIdcard();          System.out.println("===================身份证正面信息===================");        aliOcrIdcard.getAliOcrIdcard("d://yhxface2.jpg", "face");       System.out.println("===================身份证反面信息===================");         aliOcrIdcard.getAliOcrIdcard("d://yhxback2.jpg", "back");    }

   /**    * 获取 A阿里云-数据服务_5_1_身份证识别,得到身份证基本信息    * @return    */   public void getAliOcrIdcard(String imgFile,String configStr){

       String host = "https://dm-51.data.aliyun.com";     String path = "/rest/160601/ocr/ocr_idcard.json";      String method = "POST";        Map<String, String> headers = new HashMap<String, String>();     //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105        headers.put("Authorization", "APPCODE ca5b682163b9440899a6c2b425a4e26b");        Map<String, String> querys = new HashMap<String, String>();

        String body=getJosnStrRequestBody(getStrImgBase64(imgFile),configStr);

     try {         HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, body);         String result=EntityUtils.toString(response.getEntity());            JSONObject resultObj = new JSONObject(result);            JSONArray outputArray = resultObj.getJSONArray("outputs");            String output = outputArray.getJSONObject(0).getJSONObject("outputValue").getString("dataValue"); // 取出结果json字符串            JSONObject out = new JSONObject(output);            if (out.getBoolean("success")) {

                if(!configStr.isEmpty()&&configStr.equals("face")){                    String addr = out.getString("address"); // 获取地址                    String configstr = out.getString("config_str"); // 获取身份证正反面face/side                    String name = out.getString("name"); // 获取名字                    String num = out.getString("num"); // 获取身份证号                    String sex = out.getString("sex"); // 获取性别                    String birth = out.getString("birth"); // 获取身份证号                    String nationality = out.getString("nationality"); // 获取民族                    boolean success = out.getBoolean("success"); // 获取识别结果                    System.out.printf("addr : %s \n configstr : %s \n  name : %s \n num : %s \n sex : %s\n birth : %s\n nationality : %s\n",                            addr, configstr, name,num, sex, birth,nationality);               }

               if(!configStr.isEmpty()&&configStr.equals("back")){                 String configstr = out.getString("config_str"); // 获取身份证正反面face/side                    String startdate = out.getString("start_date"); //获取有效期起始时间                    String enddate = out.getString("end_date"); // 获取有效期结束时间                    String issue = out.getString("issue"); // 获取签发机关                    boolean success = out.getBoolean("success"); // 获取识别结果                    System.out.printf(" configstr : %s \n startdate : %s\n enddate : %s\n issue : %s\n ", configstr, startdate, enddate,issue);               }

            } else {                System.out.println("predict error");            }      } catch (Exception e) {           e.printStackTrace();      }

 }

   /**    * 获取身份证图片Base64流  * String  imgFile explame "d://idcard_example.jpg";     * @return    */   public static String getStrImgBase64(String imgFile){        // 对图像进行base64编码        String strImgBase64 = "";        try {            File file = new File(imgFile);            byte[] content = new byte[(int) file.length()];            FileInputStream finputstream = new FileInputStream(file);            finputstream.read(content);            finputstream.close();            strImgBase64 = new String(Base64.encodeBase64(content));        } catch (IOException e) {            e.printStackTrace();        }        return  strImgBase64;    }

    /**    * 获取"身份证识别"请求报文Body(Josn格式的String串)     * strImgBase64:   * configStr:示上传图片是身份证正面/反面图像, "face" 表示正面,"back"表示反面   */   public static String getJosnStrRequestBody(String strImgBase64,String configStr){        // 拼装请求body的json字符串        JSONObject requestObj = new JSONObject();        try {            JSONObject configObj = new JSONObject();               JSONObject obj = new JSONObject();               JSONArray inputArray = new JSONArray();               //表示上传图片是身份证正面/反面图像, “face” 表示正面,”back”表示反面               configObj.put("side", configStr);               obj.put("image", getParam(50, strImgBase64));               obj.put("configure", getParam(50, configObj.toString()));               inputArray.put(obj);               requestObj.put("inputs", inputArray);;        } catch (JSONException e) {            e.printStackTrace();        }        String requestBody = requestObj.toString();        return requestBody;    }

    /**     * 获取参数的json对象     */    public  static JSONObject getParam(int type, String dataValue) {        JSONObject obj = new JSONObject();        try {            obj.put("dataType", type);            obj.put("dataValue", dataValue);        } catch (JSONException e) {            e.printStackTrace();        }        return obj;    } 

}



package com.zct.yfq.client.fddsignature.action;

import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import java.security.cert.X509Certificate;import java.util.ArrayList;import java.util.List;import java.util.Map;

import javax.net.ssl.SSLContext;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;

import org.apache.commons.lang.StringUtils;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpDelete;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.methods.HttpPut;import org.apache.http.conn.ClientConnectionManager;import org.apache.http.conn.scheme.Scheme;import org.apache.http.conn.scheme.SchemeRegistry;import org.apache.http.conn.ssl.SSLSocketFactory;import org.apache.http.entity.ByteArrayEntity;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;

public class HttpUtils {

   /**    * get     *     * @param host    * @param path    * @param method  * @param headers     * @param querys  * @return    * @throws Exception  */   public static HttpResponse doGet(String host, String path, String method,             Map<String, String> headers,            Map<String, String> querys)            throws Exception {             HttpClient httpClient = wrapClient(host);

      HttpGet request = new HttpGet(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {         request.addHeader(e.getKey(), e.getValue());        }

        return httpClient.execute(request);    }

   /**    * post form   *     * @param host    * @param path    * @param method  * @param headers     * @param querys  * @param bodys   * @return    * @throws Exception  */   public static HttpResponse doPost(String host, String path, String method,            Map<String, String> headers,            Map<String, String> querys,             Map<String, String> bodys)            throws Exception {              HttpClient httpClient = wrapClient(host);

      HttpPost request = new HttpPost(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {           request.addHeader(e.getKey(), e.getValue());        }

        if (bodys != null) {            List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();

            for (String key : bodys.keySet()) {                nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));            }            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");            formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");            request.setEntity(formEntity);        }

        return httpClient.execute(request);    }   

    /**    * Post String     *     * @param host    * @param path    * @param method  * @param headers     * @param querys  * @param body    * @return    * @throws Exception  */   public static HttpResponse doPost(String host, String path, String method,            Map<String, String> headers,            Map<String, String> querys,             String body)            throws Exception {              HttpClient httpClient = wrapClient(host);

      HttpPost request = new HttpPost(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {           request.addHeader(e.getKey(), e.getValue());        }

        if (StringUtils.isNotBlank(body)) {            request.setEntity(new StringEntity(body, "utf-8"));        }

        return httpClient.execute(request);    }

  /**    * Post stream     *     * @param host    * @param path    * @param method  * @param headers     * @param querys  * @param body    * @return    * @throws Exception  */   public static HttpResponse doPost(String host, String path, String method,            Map<String, String> headers,            Map<String, String> querys,             byte[] body)            throws Exception {              HttpClient httpClient = wrapClient(host);

      HttpPost request = new HttpPost(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {           request.addHeader(e.getKey(), e.getValue());        }

        if (body != null) {           request.setEntity(new ByteArrayEntity(body));        }

        return httpClient.execute(request);    }

  /**    * Put String  * @param host    * @param path    * @param method  * @param headers     * @param querys  * @param body    * @return    * @throws Exception  */   public static HttpResponse doPut(String host, String path, String method,             Map<String, String> headers,            Map<String, String> querys,             String body)            throws Exception {              HttpClient httpClient = wrapClient(host);

      HttpPut request = new HttpPut(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {         request.addHeader(e.getKey(), e.getValue());        }

        if (StringUtils.isNotBlank(body)) {            request.setEntity(new StringEntity(body, "utf-8"));        }

        return httpClient.execute(request);    }

  /**    * Put stream  * @param host    * @param path    * @param method  * @param headers     * @param querys  * @param body    * @return    * @throws Exception  */   public static HttpResponse doPut(String host, String path, String method,             Map<String, String> headers,            Map<String, String> querys,             byte[] body)            throws Exception {              HttpClient httpClient = wrapClient(host);

      HttpPut request = new HttpPut(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {         request.addHeader(e.getKey(), e.getValue());        }

        if (body != null) {           request.setEntity(new ByteArrayEntity(body));        }

        return httpClient.execute(request);    }

  /**    * Delete  *     * @param host    * @param path    * @param method  * @param headers     * @param querys  * @return    * @throws Exception  */   public static HttpResponse doDelete(String host, String path, String method,          Map<String, String> headers,            Map<String, String> querys)            throws Exception {             HttpClient httpClient = wrapClient(host);

      HttpDelete request = new HttpDelete(buildUrl(host, path, querys));        for (Map.Entry<String, String> e : headers.entrySet()) {           request.addHeader(e.getKey(), e.getValue());        }

        return httpClient.execute(request);    }

   private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {      StringBuilder sbUrl = new StringBuilder();       sbUrl.append(host);       if (!StringUtils.isBlank(path)) {         sbUrl.append(path);        }        if (null != querys) {            StringBuilder sbQuery = new StringBuilder();         for (Map.Entry<String, String> query : querys.entrySet()) {             if (0 < sbQuery.length()) {                    sbQuery.append("&");                }             if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {                  sbQuery.append(query.getValue());                }              if (!StringUtils.isBlank(query.getKey())) {                   sbQuery.append(query.getKey());                   if (!StringUtils.isBlank(query.getValue())) {                     sbQuery.append("=");                       sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));                   }                                   }           }         if (0 < sbQuery.length()) {                sbUrl.append("?").append(sbQuery);          }        }

        return sbUrl.toString();    }

 private static HttpClient wrapClient(String host) {       HttpClient httpClient = new DefaultHttpClient();     if (host.startsWith("https://")) {          sslClient(httpClient);        }

       return httpClient;    }

   private static void sslClient(HttpClient httpClient) {        try {            SSLContext ctx = SSLContext.getInstance("TLS");            X509TrustManager tm = new X509TrustManager() {                public X509Certificate[] getAcceptedIssuers() {                    return null;                }                public void checkClientTrusted(X509Certificate[] xcs, String str) {

                }                public void checkServerTrusted(X509Certificate[] xcs, String str) {

                }            };            ctx.init(null, new TrustManager[] { tm }, null);            SSLSocketFactory ssf = new SSLSocketFactory(ctx);            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);            ClientConnectionManager ccm = httpClient.getConnectionManager();            SchemeRegistry registry = ccm.getSchemeRegistry();            registry.register(new Scheme("https", 443, ssf));        } catch (KeyManagementException ex) {            throw new RuntimeException(ex);        } catch (NoSuchAlgorithmException ex) {          throw new RuntimeException(ex);        }    }}

通过阿里云API 身份证图片或拍身份证 读取身份证正反面信息相关推荐

  1. java实现身份证实名认证(阿里云api)

    java实现身份证实名认证(调用阿里云api) !!这个接口调用了公安接口 进行验证 不是普通的身份证号码验证.可以识别身份证号码生成器 阿里api市场链接: https://market.aliyu ...

  2. 使用阿里云OSS实现图片上传案例

    文章目录 前言 一.OSS是什么? 二.使用步骤 1.开通OSS服务 2.创建bucket 3.创建子账户 4.查看帮助文档,编写后端代码 5.layui前端 总结 前言 在正式的开发环境中,类似图片 ...

  3. 使用阿里云的OSS图片上传,这里是用的上传网络流

    使用阿里云的OSS图片上传,这里是用的上传网络流 思路: /** 文件上传到OSS 上传网络流 以下代码用于上传网络流: 1.通过element的el-upload插件,通过action发送请求到后台 ...

  4. 调用阿里云API实现证件照生成

    目录 1. 作者介绍 2. 算法介绍 2.1 阿里云介绍 2.2 证件照生成背景 2.3 图像分割算法 3.调用阿里云API进行证件照生成实例 3.1 准备工作 3.2 实验代码 3.3 实验结果与分 ...

  5. 【逗老师带你学IT】PRTG监控系统通过阿里云API获取云产品运行状况

    本文介绍如何使PRTG监控系统通过阿里云监控API获取阿里云产品监控数据.例如网络带宽,ECS性能,RDS产品性能等. 本文主要涉及的技术点: 1.PRTG监控系统高级自定义传感器的使用 2.PRTG ...

  6. 【阿里云API】 阿里云API调用的若干说明

    阿里云API 为了监控我们使用的一些阿里云产品,需要些一些脚本,定时调用这些脚本来获得相关阿里云产品的信息. ■ 概述 调用阿里云API大约分成两类方法,一个是直接从HTTP协议开始,自己根据阿里云的 ...

  7. 2021阿里云“API满意度”调研

    简介:只需花费几分钟,即有机会获得阿里云通用代金券. 4月,"阿里云API满意度有奖征集活动"已正式启动! 只需花费几分钟,进入评分页面为"阿里云API满意度" ...

  8. 阿里云 API 签名机制的 Python 实现

    在调用阿里云 API 的时候,最让人头疼的就是 API 的签名(Signature)机制,阿里云在通用文档中也有专项说明,但是仅仅有基于 Java 的实现代码示例.所以这里基于 Python 来分析下 ...

  9. 基于Python2.7的阿里云API调用及运维相关

    基于Python2.7的阿里云API调用及运维相关 http://blog.chinaunix.net/uid-17291169-id-5212576.html 公司部分业务放在阿里云上面,虽然阿里云 ...

  10. 阿里云API网关配置详解

    首先讲一下使用API网关的原因: 我想很多公司都因API或开放API的安全性感到苦恼吧,大部分公司都会自己的API进行加密处理,或token验证,可这就能防范,其他人抓取接口进行非法操作了吗?答案是肯 ...

最新文章

  1. 字母组成美丽的图形 c语言,[原创]美丽蝴蝶
  2. [导入]深入了解OpenOffice.org(二){作者:路广}
  3. 思科模拟器-虚拟局域网的划分与配置实验
  4. python多线程为啥是假的?(GIL 全局解释器锁)(python多线程不适合并行化的计算密集型代码)
  5. 【TensorFlow】tf.concat的用法
  6. notepad python_Notepad++配置Python开发环境
  7. LeetCode 422. 有效的单词方块
  8. 关于字符匹配所引起的的问题
  9. HTTP协议的无状态性
  10. Python入门深度学习完整指南
  11. python三阶魔方_三阶魔方7步还原法详解 简单
  12. 如何在ppt中插入html动态图表
  13. 年全国高校计算机能力挑战赛,初赛公示_2020年全国高校计算机能力挑战赛
  14. 网站优化基本技巧(网站优化的主要工作是什么)
  15. 论文写不下去时怎么办?
  16. 网易微专业java高级笔记_网易前端微专业------页面架构笔记
  17. 有关H5第八章的页面布局与规划介绍
  18. 使用微PE安装U盘windows系统
  19. 计算机设备标签怎么贴,电脑怎么打印不干胶标签 电脑打印不干胶标签操作流程【图文】...
  20. 利用Python爬取金十数据新闻事件

热门文章

  1. 基于SSM整合阿里直播服务----java代码实现
  2. 头歌MySQL数据库
  3. U-boot下编写代码对SPI flash进行操作
  4. Linux下的Cadence软件的spice和Verliog步骤(这是最最最为简单的超详细!!!!)
  5. MQTT入门2 -- “Error: Invalid password hash for user nick.”和“Connection Refused: not authorised.”...
  6. html 手机录视频,手机怎么录制视频 怎么用手机录视频?
  7. Python修改桌面分辨率
  8. Kibana常用搜索语法
  9. python字典操作首字母与星期的对应_python:第五章 字典与集合作业
  10. 周易六十四卦——风雷益卦