美文网首页
调用OCR识别身份证信息

调用OCR识别身份证信息

作者: 一口奥利奥 | 来源:发表于2019-06-21 11:27 被阅读0次

OCR身份证服务接口:

//上传身份信息及判断接口返回信息:

try {

            OCRResponse ocrResponse = new OCRClient().recognition(file, cbName, cbIdno);

            if(!ocrResponse.isSuccess()){

                errors.reject(null, ocrResponse.getDesc());

                return error();

            }

            String side = ocrResponse.getResult().getSide();

            logger.info(">>>>> adDocCd: "+adDocCd+",side: "+side);

            //身份证正面照校验

            if("01-1".equals(adDocCd)){

                if(!"front".equals(side)){

                    errors.reject(null, "上传的照片为非身份证正面照片,请核实后上传");

                    return error();

                }

                if(!cbIdno.equals(ocrResponse.getResult().getIdCardNumber())){

                    errors.reject(null, "您上传的身份证信息有误,请核实后再上传");

                    return error();

                }

                if(!cbName.equals(ocrResponse.getResult().getName())){

                    TblCsmCstbsc tblCsmCstbsc=new TblCsmCstbsc();

                    tblCsmCstbsc.setCbCustId(cbCustId);

                    tblCsmCstbsc.setCbName(ocrResponse.getResult().getName());

                    tblCsmCstbscDao.updateByPrimaryKeySelective(tblCsmCstbsc);

                }

            }

            //身份证背面照校验

            if("01-2".equals(adDocCd)){

                if(!"back".equals(side)){

                    errors.reject(null, "上传的照片为非身份证背面照片,请核实后上传");

                    return error();

                }

                String currentDateStr = DateUtil.getCurrentDateStr();

                String validDataBegin = ocrResponse.getResult().getValidDataBegin();

                String validDataEnd = ocrResponse.getResult().getValidDataEnd();

                if(StringUtils.isBlank(validDataBegin)||StringUtils.isBlank(validDataEnd)){

                    errors.reject(null, "无法解析身份证有效期");

                    return error();

                }

                if(!"长期".equals(validDataEnd)){

                    validDataBegin=validDataBegin.replaceAll("\\.","");

                    validDataEnd=validDataEnd.replaceAll("\\.","");

                    int dayCount = DateUtil.dayCount(currentDateStr, validDataEnd);

                    if(dayCount >0 && (dayCount+1) <= 30){

                        errors.reject(null, "当前身份证即将过期,请提供最新身份证进行更新");

                        return error();

                    }

                    if(dayCount <= 0){

                        errors.reject(null, "当前身份证已过期,请提供最新身份证进行更新");

                        return error();

                    }

                }

                TblCsmCstbsc tblCsmCstbsc=new TblCsmCstbsc();

                tblCsmCstbsc.setCbCustId(cbCustId);

                tblCsmCstbsc.setCbIdEffectDate(validDataBegin);

                tblCsmCstbsc.setCbIdExpiryDate(validDataEnd);

                tblCsmCstbsc.setCbIsuseOcr("1");

                tblCsmCstbsc.setCbUseocrDate(currentDateStr);

                tblCsmCstbscDao.updateByPrimaryKeySelective(tblCsmCstbsc);

            }

        }catch (Exception e){

            logger.error(">>>>> OCR recognition Exception:",e);

            errors.reject(null, "文件上传出现错误,请联系管理员");

            return error();

        }

//识别身份信息:

public OCRResponse recognition(MultipartFile file,String name,String idNo){

OCRResponse ocrResponse=new OCRResponse();

String imgBase64;

try {

byte[] btImg = readStream(file.getInputStream());//读取管道中的流数据

BASE64Encoder be =new BASE64Encoder();

imgBase64 = be.encode(btImg).replaceAll("[\r\n]","");

}catch (Exception e) {

logger.error(">>>>> InputStream toBase64 Exception: ",e);

ocrResponse.setDesc("解析文件流出错");

return ocrResponse;

}

String ocrUrl = SysUtil.getStringConfigProperty("ocr.userGroup.url");

logger.info(">>>>> ocrUrl:"+ocrUrl);

JSONObject jsonObj =new JSONObject();

jsonObj.put("channelNo","A10A00JCCF");

jsonObj.put("name", name);

jsonObj.put("idno", idNo);

jsonObj.put("faceImage",imgBase64);

String request = jsonObj.toJSONString();

logger.info(">>>>> Request:"+request);

String response=null;

try{

response = HttpUtil.doPost(ocrUrl, request);

}catch (Exception e){

logger.error(">>>>> Call OCR Exception: ",e);

ocrResponse.setDesc("调用OCR服务出现异常");

}

logger.info("<<<<< Response:"+response);

if(response !=null){

try{

response=response.replaceAll("\\\\","");

response=response.replaceAll("\"\\{","\\{");

response=response.replaceAll("\\}\"","}");

ocrResponse = JSON.parseObject(response, OCRResponse.class);

}catch (Exception e){

logger.error(">>>>> JSON.parseObject Exception: ",e);

ocrResponse.setDesc("解析返回报文出错");

}

}

return ocrResponse;

}

/**

* 读取管道中的流数据

*/

private byte[] readStream(InputStream inStream) {

ByteArrayOutputStream bops =new ByteArrayOutputStream();

int data = -1;

try {

while((data = inStream.read()) != -1){

bops.write(data);

}

return bops.toByteArray();

}catch(Exception e){

logger.error(">>>>> InputStream toByteArray Exception: ",e);

throw new RuntimeException("解析文件流出错");

}

}

相关文章

  • 微信小程序身份证ocr识别

    关键词:身份证识别 身份证ocr识别 微信小程序身份证识别 微信小程序ocr识别 身份证ocr识别api (网图,...

  • 调用OCR识别身份证信息

    OCR身份证服务接口: //上传身份信息及判断接口返回信息: try { OCRResponse oc...

  • 身份证ocr识别核验webservice API接口调用

    关键词:身份证识别 身份证ocr识别 身份证核验 身份证识别核验 身份证ocr核验API 现在出门没有身份证可谓是...

  • 手机端证件ocr识别sdk

    关键词:证件ocr识别 安卓证件识别 ios证件识别 证件ocr识别SDK 身份证识别 身份证、驾驶证等证件是每个...

  • 移动端证件识别ocr SDK

    关键词:证件ocr识别 安卓证件识别 ios证件识别 证件ocr识别SDK 身份证识别 身份证、驾驶证等证件是每个...

  • android,ios证件识别,手机只需扫一扫

    关键词:证件ocr识别 安卓证件识别 ios证件识别 证件ocr识别SDK 身份证识别 证件识别,该产品支持And...

  • 移动端证件识别ocr软件

    关键词:证件ocr识别 安卓证件识别 ios证件识别 证件ocr识别SDK 身份证识别 随着智能手机及平板电脑以及...

  • iOS OCR(身份证号码识别)

    简介 身份证识别,又称OCR技术。OCR技术是光学字符识别的缩写,是通过扫描等光学输入方式将各种票据、报刊、书籍、...

  • JS调用阿里云OCR身份证识别

      因为工作原因,需要调取阿里云OCR身份证识别,但是阿里云给的请求示例都是后台调用的代码,由于特殊原因,我需要的...

  • iOS - 身份证扫描识别技术

    身份证识别,又称OCR技术。OCR技术是光学字符识别的缩写,是通过扫描等光学输入方式将各种票据、报刊、书籍、文稿及...

网友评论

      本文标题:调用OCR识别身份证信息

      本文链接:https://www.haomeiwen.com/subject/zvxyqctx.html