文档章节

使用阿里云 身份证号正反面拍照图片识别信息

无知的小孩
 无知的小孩
发布于 2017/06/16 17:00
字数 1718
阅读 303
收藏 1

1.pom.xml 

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.2.1</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-util</artifactId>
            <version>9.3.7.v20160115</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.5</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.8</version>
        </dependency>

2.HttpUtils.java

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);
        }
    }
}

3.IDcard_back.java

public class IDcard_back {

    public IDcard_back() {
    }
    //发证机关
    private String issue;
    //起始时间
    private String start_date;
    //截止日期
    private String end_date; 
    //验证状态
    private boolean success;
    
    public String getIssue() {
        return issue;
    }
    public void setIssue(String issue) {
        this.issue = issue;
    }
    public String getStart_date() {
        return start_date;
    }
    public void setStart_date(String start_date) {
        this.start_date = start_date;
    }
    public String getEnd_date() {
        return end_date;
    }
    public void setEnd_date(String end_date) {
        this.end_date = end_date;
    }
    public boolean isSuccess() {
        return success;
    }
    public void setSuccess(boolean success) {
        this.success = success;
    }
 
}

4.IDcard_face.java

public class IDcard_face {

    public IDcard_face() {
    }
    //身份证号
    private String num;
    //姓名
    private String name;
    //出生日期
    private String birth;
    //民族
    private String nationality;
    //性别
    private String sex;
    //地址
    private String address;
    //验证状态
    private boolean success;

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getBirth() {
        return birth;
    }

    public void setBirth(String birth) {
        this.birth = birth;
    }

    public String getNationality() {
        return nationality;
    }

    public void setNationality(String nationality) {
        this.nationality = nationality;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    
    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }
}

5.IDcard.java

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;

import net.coobird.thumbnailator.Thumbnails;
import sun.misc.BASE64Encoder;

public class IDcard {
    
    private static String host = "https://dm-51.data.aliyun.com";
    private static String path = "/rest/160601/ocr/ocr_idcard.json";
    private static String method = "POST";
    private static String appcode = "";
     
    /*
     * 获取参数的json对象
     */
    public static JSONObject getParam(int type, JSONObject dataValue) {
        JSONObject obj = new JSONObject();
        try {
            obj.put("dataType", type);
            obj.put("dataValue", dataValue);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return obj;
    }

    /*
     * 获取参数的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;
    }
    
    public static JSONObject getConfigureSide(String side) { 
        JSONObject json_side = new JSONObject();
        json_side.put("side",side);
        return getParam(50, JSON.toJSONString(json_side));
    }
    
    public static JSONObject getImage(String imgPath) { 
        return getParam(50, GetImageBase64Str(imgPath));
    }
    
    //图片转化成base64字符串  
    public static String GetImageBase64Str(String filePath)  
    {//将图片文件转化为字节数组字符串,并对其进行Base64编码处理  
        InputStream in = null;  
        byte[] data = null;  
        //读取图片字节数组  
        try   
        {  
            in = new FileInputStream(filePath);          
            data = new byte[in.available()];  
            in.read(data);  
            in.close();  
        }   
        catch (IOException e)   
        {  
            e.printStackTrace();  
        }  
        //对字节数组Base64编码  
        BASE64Encoder encoder = new BASE64Encoder();  
        return encoder.encode(data);//返回Base64编码过的字节数组字符串  
    } 
    
    public static IDcard_face getIDcard_face(String imgPath){
        
        Map<String, String> headers = new HashMap<String, String>();
        //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
        headers.put("Authorization", "APPCODE " + appcode);
        //根据API的要求,定义相对应的Content-Type
        headers.put("Content-Type", "application/json; charset=UTF-8");
        Map<String, String> querys = new HashMap<String, String>();
        String fromPic = imgPath;
        String toPic = imgPath;
        try {
            Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        Map<String, Object> inputs = new HashMap<String, Object>();
        Map<String, Object> inputs_map = new HashMap<String, Object>();
        inputs_map.put("image", getImage(fromPic));
        inputs_map.put("configure", getConfigureSide("face"));
        List<Map<String, Object>> lst_inputs = new ArrayList<Map<String, Object>>();
        lst_inputs.add(inputs_map);
        inputs.put("inputs", lst_inputs);
        String bodys = JSON.toJSONString(inputs);
        try {
            HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
            if(response.getStatusLine().getStatusCode()==200){  
                String strResult="";
                try {  
                    strResult = EntityUtils.toString(response.getEntity());     
                } catch (IllegalStateException e) {  
                    e.printStackTrace();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
                JSONArray outputs = JSONObject.parseObject(strResult).getJSONArray("outputs");
                JSONObject outputValue = outputs.getJSONObject(0).getJSONObject("outputValue");
                JSONObject idcard = JSONObject.parseObject(outputValue.getString("dataValue"));
                IDcard_face iDcard_face =idcard.toJavaObject(IDcard_face.class);
                if(iDcard_face.isSuccess()){
                    return iDcard_face;
                } 
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    public static IDcard_back getIDcard_back(String imgPath){ 
        Map<String, String> headers = new HashMap<String, String>();
        //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
        headers.put("Authorization", "APPCODE " + appcode);
        //根据API的要求,定义相对应的Content-Type
        headers.put("Content-Type", "application/json; charset=UTF-8");
        Map<String, String> querys = new HashMap<String, String>();
        String fromPic = imgPath;
        String toPic = imgPath;
        try {
            Thumbnails.of(fromPic).scale(1f).outputQuality(0.25f).toFile(toPic);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        Map<String, Object> inputs = new HashMap<String, Object>();
        Map<String, Object> inputs_map = new HashMap<String, Object>();
        inputs_map.put("image", getImage(fromPic));
        inputs_map.put("configure", getConfigureSide("back"));
        List<Map<String, Object>> lst_inputs = new ArrayList<Map<String, Object>>();
        lst_inputs.add(inputs_map);
        inputs.put("inputs", lst_inputs);
        String bodys = JSON.toJSONString(inputs);
        try {
            HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
            if(response.getStatusLine().getStatusCode()==200){  
                String strResult="";
                try {  
                    strResult = EntityUtils.toString(response.getEntity());     
                } catch (IllegalStateException e) {  
                    e.printStackTrace();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
                JSONArray outputs = JSONObject.parseObject(strResult).getJSONArray("outputs");
                JSONObject outputValue = outputs.getJSONObject(0).getJSONObject("outputValue");
                JSONObject idcard = JSONObject.parseObject(outputValue.getString("dataValue"));
                System.out.println(idcard);
                IDcard_back iDcard_back =idcard.toJavaObject(IDcard_back.class);
                System.out.println(iDcard_back.isSuccess());
                if(iDcard_back.isSuccess()){
                    return iDcard_back;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        String imgPath = "d://face.jpg";
        IDcard_face iDcard_face = getIDcard_face(imgPath);
        System.out.println(iDcard_face.getBirth());
        imgPath = "d://back.jpg";
        IDcard_back iDcard_back = getIDcard_back(imgPath);
        System.out.println(iDcard_back.getIssue());
        
    }
}

© 著作权归作者所有

共有 人打赏支持
无知的小孩
粉丝 1
博文 70
码字总数 19034
作品 0
贵阳
后端工程师
私信 提问
自动识别身份证并与客户注册姓名和身份证号比对,识别成功后上传到数据库,识别不成功则不上传

我们是一家互联网金融公司。客户进行认证的第一步是填写身份信息,第二步是进行身份证照片上传。进行第二步时候,要求拍照自动识别身份证(非身份证无法拍照上传,是身份证则识别并拍照,拍照...

利安普惠金融
2017/05/19
8
7
读光OCR-文字识别技术解读与应用案例分析

读光OCR-文字识别技术解读与应用案例分析 摘要:大数据上云特惠活动系列直播,阿里巴巴高级算法专家永攀对读光OCR-文字识别技术和行业应用进行讲述。OCR的本质是识别图片中的文字,即在复杂的...

云迹九州
2018/06/21
0
0
The Best Image Ocr SDK For BAT.

The Best Image Ocr SDK For BAT. 百度 OCR 通用文字识别 通用文字识别(高精度版) 通用文字识别(含位置信息版) 通用文字识别(含位置高精度版) 通用文字识别(含生僻字版) 网络图片文字...

godruoyi
2017/10/10
0
0
关于微信和支付宝线下扫码支付代理服务商能做什么

1.1 微信支付 1.1.1 JSAPI网页支付 JSAPI网页支付即前文说的公众号支付,可在微信公众号、朋友圈、聊天会话中点击页面链接,或者用微信“扫一扫”扫描页面地址二维码在微信中打开商户HTML5页...

王超23
2017/04/19
349
4
阿里云域名备案流程

序号 阶段 所需资料 所需时间 1、购买域名 选好域名,即时购买即时(2-3分钟) 2、注册备案账号 提供一常用邮箱,查看邮件,完成登录账户注册,记下备案ID即时(1-2分钟) 3、登录备案系统验证...

羊皮卷
2016/04/15
629
0

没有更多内容

加载失败,请刷新页面

加载更多

合理设置线程池大小

要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析: 任务的性质:CPU密集型任务、IO密集型任务、混合型任务。 任务的优先级:高、中、低。 任务的执行时间:长、中...

飓风2000
15分钟前
2
0
git checkout命令详解

在实际应用中,git checkout是最为常见命令之一。 此命令参数众多,功能多样,但有些功能可能整个职业生涯都不会用到,所以本文只介绍最为实用的部分。 如果想要了git checkout命令所有功能,...

天王盖地虎626
15分钟前
2
0
jquery中处理ajax跨域的三大方式

之前mui项目开发过程遇到过跨域问题,搜集了下关于相关跨域的解决方案: 一、处理跨域的方式: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已经实现了跨域访问。但ie10以下...

ZhangLG
16分钟前
1
0
HTTP访问控制(CORS)

HTTP访问控制(CORS)

gdxz110
18分钟前
1
0
11g DG中的参数

11g DG中的SEC_CASE_SENSITIVE_LOGON参数 在一次配置dg完成后,备库会时不时的无法自动应用日志,后台日志报错如下: 期间排除了修改sys密码问题、网络问题、参数_system_trig_enabled问题(...

突突突酱
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部