从身份证图片获取文字信息

      最近信息公司有个项目,需要收集商户的身份信息。当时考虑把功能做在微信里面代替做在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"}

 

   

   

在Java中识别阿里云OSS(Object Storage Service)上图片中的身份证信息,通常需要结合OCR (Optical Character Recognition) 技术,也就是光学字符识别。阿里云提供了一个专门的服务——阿里云智能OCR服务,可以实现在云端自动识别图片中的文字,包括身份证号码。 首先,你需要在阿里云控制台创建一个OCR实例,并获取相应的API密钥和访问令牌。然后,你可以使用阿里云提供的SDK(如Java SDK)来调用OCR API。以下是一个简单的步骤概述: 1. **设置依赖**:引入对应的阿里云OCR SDK到你的项目中。 2. **初始化认证**:使用你的AccessKey和SecretKey创建一个认证对象。 3. **读取OSS图片**:从OSS下载图片到本地,或者直接通过URL访问。 4. **调用OCR服务**:使用SDK提供的`BasicClient`发起OCR识别请求,传入图像内容或路径。 5. **解析返回结果**:API会返回一个包含识别出的文字和位置信息的对象,从中提取身份证号码。 ```java import com.aliyun.ocr.OcrClient; import com.aliyun.ocr.OcrImage; import com.aliyun.ocr.model.General OCRRequest; // ... String accessKeyId = "your_access_key_id"; String accessKeySecret = "your_access_key_secret"; String instanceId = "your_ocr_instance_id"; OcrClient client = new OcrClient(new ClientConfiguration(), accessKeyId, accessKeySecret); OCRRequest request = new OCRRequest(); request.setImage(new FileInputStream("path_to_your_image_on_oss")); // 或者URL request.setLanguageType("zh-cn"); // 设置语言类型为中国简体 GeneralResponse response = client.doOCR(request); List<OcrWord> words = response.getWordsResult(); for (OcrWord word : words) { if (word.getText().matches("\\d{15}")) { // 如果文本看起来像身份证号码 System.out.println("识别出的身份证号码:" + word.getText()); } } ``` 注意:这只是一个基本示例,实际使用时还需要处理异常并可能需要对识别结果进行进一步的验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值