最近信息公司有个项目,需要收集商户的身份信息。当时考虑把功能做在微信里面代替做在app里面,app需要开发二个平台之外还要考虑各种手机版本的问题,甚是繁琐。但是由于购买的身份证读卡器,只有安卓和IOS版本的SDK,没有可以支持微信的SDK,所以只能把开发外包出去做在APP上面。
这二天看了一个阿凡达数据API接口,功能还算强大,完全能满足直接拍照身份证获取身份证中的信息,并且还有接口可以做身份证校验处理。唯一遗憾的是接口基本上都是收费的,如果不是商用的话,费用太贵。
实现方式比较简单,首先把图片转换成base64编码字符串。
/**
* 将图片转换为BASE64加密字符串.
*
* @param imagePath
* 图片路径.
* @param format
* 图片格式.
* @return
*/
public static String convertImageToByte(String imagePath, String format) {
BASE64Encoder encoder = new BASE64Encoder();
File file = new File(imagePath);
BufferedImage bi = null;
ByteArrayOutputStream baos = null;
String result = null;
try {
bi = ImageIO.read(file);
baos = new ByteArrayOutputStream();
ImageIO.write(bi, format == null ? "jpg" : format, baos);
byte[] bytes = baos.toByteArray();
result = encoder.encode(bytes).trim();
System.out.println("将图片转换为BASE64加密字符串成功!"+result);
} catch (IOException e) {
System.out.println("将图片转换为 BASE64加密字符串失败: " + e);
} finally {
try {
if (baos != null) {
baos.close();
baos = null;
}
} catch (Exception e) {
System.out.println("关闭文件流发生异常: " + e);
}
}
return result;
}
把对应的URL和编码传入,就可以返回对应身份证的JSON字符串。
private static void httpUrlConnection(String pathUrl, String base64Str) {
try {
String param= "key=6766ee9f3dfd4297868bcf024ea68c49&pic_ext=jpg&bas64String="+ base64Str ; //建立连接
URL url=new URL(pathUrl);
HttpURLConnection httpConn=(HttpURLConnection)url.openConnection();
//设置参数
httpConn.setDoOutput(true); //需要输出
httpConn.setDoInput(true); //需要输入
httpConn.setUseCaches(false); //不允许缓存
httpConn.setRequestMethod("POST"); //设置POST方式连接
//设置请求属性
httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpConn.setRequestProperty("Connection", "Keep-Alive");// 维持长连接
httpConn.setRequestProperty("Charset", "UTF-8");
//连接,也可以不用明文connect,使用下面的httpConn.getOutputStream()会自动connect
httpConn.connect();
//建立输入流,向指向的URL传入参数
DataOutputStream dos=new DataOutputStream(httpConn.getOutputStream());
dos.writeBytes(param);
dos.flush();
dos.close();
//获得响应状态
int resultCode=httpConn.getResponseCode();
if(HttpURLConnection.HTTP_OK==resultCode){
StringBuffer sb=new StringBuffer();
String readLine=new String();
BufferedReader responseReader=new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8"));
while((readLine=responseReader.readLine())!=null){
sb.append(readLine).append("\n");
}
responseReader.close();
System.out.println(sb.toString());
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
对应JSON的格式:
{"result":{"nation":"汉","number":"330782198410185315","name":"xx阳","address":"浙江省XXXXXXX溪村4组","sex":"男"},"error_code":0,"reason":"Succes"}