通过阿里云API 身份证图片或拍身份证 读取身份证正反面信息
参看文:阿里的资料
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 身份证图片或拍身份证 读取身份证正反面信息相关推荐
- java实现身份证实名认证(阿里云api)
java实现身份证实名认证(调用阿里云api) !!这个接口调用了公安接口 进行验证 不是普通的身份证号码验证.可以识别身份证号码生成器 阿里api市场链接: https://market.aliyu ...
- 使用阿里云OSS实现图片上传案例
文章目录 前言 一.OSS是什么? 二.使用步骤 1.开通OSS服务 2.创建bucket 3.创建子账户 4.查看帮助文档,编写后端代码 5.layui前端 总结 前言 在正式的开发环境中,类似图片 ...
- 使用阿里云的OSS图片上传,这里是用的上传网络流
使用阿里云的OSS图片上传,这里是用的上传网络流 思路: /** 文件上传到OSS 上传网络流 以下代码用于上传网络流: 1.通过element的el-upload插件,通过action发送请求到后台 ...
- 调用阿里云API实现证件照生成
目录 1. 作者介绍 2. 算法介绍 2.1 阿里云介绍 2.2 证件照生成背景 2.3 图像分割算法 3.调用阿里云API进行证件照生成实例 3.1 准备工作 3.2 实验代码 3.3 实验结果与分 ...
- 【逗老师带你学IT】PRTG监控系统通过阿里云API获取云产品运行状况
本文介绍如何使PRTG监控系统通过阿里云监控API获取阿里云产品监控数据.例如网络带宽,ECS性能,RDS产品性能等. 本文主要涉及的技术点: 1.PRTG监控系统高级自定义传感器的使用 2.PRTG ...
- 【阿里云API】 阿里云API调用的若干说明
阿里云API 为了监控我们使用的一些阿里云产品,需要些一些脚本,定时调用这些脚本来获得相关阿里云产品的信息. ■ 概述 调用阿里云API大约分成两类方法,一个是直接从HTTP协议开始,自己根据阿里云的 ...
- 2021阿里云“API满意度”调研
简介:只需花费几分钟,即有机会获得阿里云通用代金券. 4月,"阿里云API满意度有奖征集活动"已正式启动! 只需花费几分钟,进入评分页面为"阿里云API满意度" ...
- 阿里云 API 签名机制的 Python 实现
在调用阿里云 API 的时候,最让人头疼的就是 API 的签名(Signature)机制,阿里云在通用文档中也有专项说明,但是仅仅有基于 Java 的实现代码示例.所以这里基于 Python 来分析下 ...
- 基于Python2.7的阿里云API调用及运维相关
基于Python2.7的阿里云API调用及运维相关 http://blog.chinaunix.net/uid-17291169-id-5212576.html 公司部分业务放在阿里云上面,虽然阿里云 ...
- 阿里云API网关配置详解
首先讲一下使用API网关的原因: 我想很多公司都因API或开放API的安全性感到苦恼吧,大部分公司都会自己的API进行加密处理,或token验证,可这就能防范,其他人抓取接口进行非法操作了吗?答案是肯 ...
最新文章
- 字母组成美丽的图形 c语言,[原创]美丽蝴蝶
- [导入]深入了解OpenOffice.org(二){作者:路广}
- 思科模拟器-虚拟局域网的划分与配置实验
- python多线程为啥是假的?(GIL 全局解释器锁)(python多线程不适合并行化的计算密集型代码)
- 【TensorFlow】tf.concat的用法
- notepad python_Notepad++配置Python开发环境
- LeetCode 422. 有效的单词方块
- 关于字符匹配所引起的的问题
- HTTP协议的无状态性
- Python入门深度学习完整指南
- python三阶魔方_三阶魔方7步还原法详解 简单
- 如何在ppt中插入html动态图表
- 年全国高校计算机能力挑战赛,初赛公示_2020年全国高校计算机能力挑战赛
- 网站优化基本技巧(网站优化的主要工作是什么)
- 论文写不下去时怎么办?
- 网易微专业java高级笔记_网易前端微专业------页面架构笔记
- 有关H5第八章的页面布局与规划介绍
- 使用微PE安装U盘windows系统
- 计算机设备标签怎么贴,电脑怎么打印不干胶标签 电脑打印不干胶标签操作流程【图文】...
- 利用Python爬取金十数据新闻事件
热门文章
- 基于SSM整合阿里直播服务----java代码实现
- 头歌MySQL数据库
- U-boot下编写代码对SPI flash进行操作
- Linux下的Cadence软件的spice和Verliog步骤(这是最最最为简单的超详细!!!!)
- MQTT入门2 -- “Error: Invalid password hash for user nick.”和“Connection Refused: not authorised.”...
- html 手机录视频,手机怎么录制视频 怎么用手机录视频?
- Python修改桌面分辨率
- Kibana常用搜索语法
- python字典操作首字母与星期的对应_python:第五章 字典与集合作业
- 周易六十四卦——风雷益卦