# OCR识别服务

结构化识别卡片证件照,目前只支持二代身份证以及营业执照(其他证件照待更新)。

# 一、请求说明

# 二、请求参数

  • 请求参数以表单形式提交,Content-Type值为: application/x-www-form-urlencoded;charset=utf-8
名称 类型 是否必须 描述
imageType String 图片类型
image String 图片信息,以base64:开头 base64数据 fs: 开头 文件云文件;参数支持数据加密,详情参照加解密方法说明
fields String 返回字段,包含face时,返回证件照人脸截图
  • 字段解释

  • imageType 类型介绍

类型字段 类型介绍
IDCARD 二代身份证
IDCARDCOPY 身份证正反面复印件
BUSINLICENCE 营业执照

请求示例:

http或https://api.spiderid.cn/api/router/rest?
<[公共请求参数]>

imageType=XXX&image=XXX...

# 三、响应参数

data 结果信息 类型 描述
message String 描述
incorrect Integer 返回码
info String json格式字符串,OCR服务识别出的信息 详情见下面附录;
公共请求参数encMethod=SM4会对数据加密,解密方法请参照加解密方法说明

# 四、成功示例

JSON示例

{
   "code": 0,
    "requestId":"dsd24...",
    "message": "success",
    "data": {
        "message": "检测成功",
        "incorrect":100,
        "info":"{\"birthDay\":\"XXX\",\"address\":\"XXX\",\"sex\":\"XXX\",\"name\":\"XXX\",\"idNumber\":\"XXX\",\"nation\":\"XXX\"}"
    }
}

# 五、失败示例

JSON示例

{
  "code": 0,
    "requestId":"dsd24...",
    "message": "success",
    "data": {
        "message": "不支持该图片文件",
        "incorrect":109
    }
}

# 六、返回码说明(incorrect)

返回码 描述 是否收费
100 检测成功
109 不支持该图片文件
120 检测失败

# 七、附录(图片类型说明)

目前OCR识别服务只支持传入二代身份证以及营业执照,即imageTypeIDCARDBUSINLICENCE(其他证件类型待更新)

  • 二代身份证(IDCARD)
名称 类型 描述
name String 名称
nation String 民族
sex String 性别
birthDay String 出生年月
idNumber String 身份证号码
address String 住址
issuingAgency String 签发机构
expiryDate String 身份证有效期
faceImg String 证件照人脸截图(传参时要求才返回)
  • 营业执照(BUSINLICENCE)
名称 类型 描述
name String 单位名称
socialCreditCode String 统一社会信用代码
cpyType String 类型
address String 地址
legalRepresentative String 法定代表人
registeredCapital String 注册资本
foundedDate String 成立日期
bussinessTerm String 营业期限
bussinessScope String 经营范围
compositionForm String 组成形式
idNumber String 编号
paidCapital String 实收资本
validStartTime String 有效期起始日期
standardTime String 标准时间
taxRegistrationNumber String 税务登记号
registrationAuthority String 登记机关

# SDK 请求示例

    public static void main(String[] args) throws IOException {

        try {
            //提供的url
            String url = "http://iv.unitid.cn/api/router/rest";
            //您的appKey
            String appkey = "XXX";
            //您的appSecret
            String secretKey = "XXX";

            //1.原客户端
            ApiClient apiClient = new DefaultApiClient(url, appkey, secretKey);
            //2.调用出错,自动重试客户端
            //AutoRetryApiClient apiClient = new AutoRetryApiClient(url, appkey, secretKey);
            OcrRecognitionRequest req = new OcrRecognitionRequest();
            //选填
            req.setFields("face");
            req.setImageType("IDCARD");

//        //1.以base64:开头,图片转换成base64位字符串
//        String img = Base64.encodeBase64String(FileUtils.readFileToByteArray(new File("C:/Users/admin/Pictures/Saved Pictures/jj.jpg")));
//        req.setImagBase64(img);

            //2.fs:开头,需要调用我们提供的上传接口,获取bucket,和objectKey,格式为:fs:+bucket:+objectKey
            String bucket = "XXX";
            String objectKey = "XXX";
            String imgData = bucket + ":" + objectKey;
            req.setImageFs(imgData);

            // 配置此参数时,会对请求参数中的image和响应结果中info属性做加密
//            req.setEncMethod(EncryptMethod.SM4);
            // 当设置encMethod后,fs上传文件也需要加密
//            byte[] encPassword = SecretGenerateUtils.getSecretKey(appkey, secretKey);
//            String fsKey = uploadFile(apiClient, "ocr", "C:/Users/admin/Pictures/Saved Pictures/jj.jpg", encPassword);
//            req.setImageFs(fsKey);

            // 设置 EncMethod 属性后,SDK会info做自动解密,您无需处理
            OcrRecognitionResponse response = apiClient.execute(req);
            //后续业务处理
        } catch (ApiException e) {
            e.printStackTrace();
        }
    }


    /**
     * 上传文件
     *
     * @param apiClient   客户端
     * @param bizType     文件上传业务类型
     * @param path        需要上传的文件路径
     * @param encPassword 文件加密密码,不为null对文件进行加密
     * @return bucket:objectKey
     */
    private static String uploadFile(ApiClient apiClient, String bizType, String path, byte[] encPassword) throws ApiException, IOException {

        FsUploadPolicyRequest fsUploadPolicyRequest = new FsUploadPolicyRequest();
        fsUploadPolicyRequest.setBizType(bizType);
        //获取文件上传权限
        FsUploadPolicyResponse fsResponse = apiClient.execute(fsUploadPolicyRequest);
        //获取权限识别
        if (null == fsResponse.getData()) {
            throw new ApiException();
        }
        //上传文件示例
        Map<String, String> params = new HashMap<String, String>(5);
        params.put("token", fsResponse.getData().getToken());
        if (fsResponse.getData().getObjectKey().endsWith("/")) {
            params.put("key", fsResponse.getData().getObjectKey() + "${filename}");
        } else {
            params.put("key", fsResponse.getData().getObjectKey());
        }
        //需要上传的文件
        Map<String, FileItem> fileParams = new HashMap<String, FileItem>(5);

        File file = new File(path);
        if (encPassword != null) {
            byte[] bytes = FileUtils.readFileToByteArray(file);
            byte[] encryptContent = Sm4Utils.encrypt(bytes, encPassword);
            String fileName = file.getName();
            FileItem fileItem = new FileItem(fileName, encryptContent, FileContentTypeUtils.mimeTypeByFilename(fileName));
            fileParams.put("file", fileItem);
        } else {
            fileParams.put("file", new FileItem(file));
        }

        //上传
        String uploadUrl = fsResponse.getData().getUploadUrl();
        String json = WebUtils.doPost(uploadUrl, params, fileParams, 30000, 30000);
        JSONObject jsonObject = JSON.parseObject(json);

        return jsonObject.getString("bucket") + ":" + jsonObject.getString("objectKey");
    }

最后更新于: 10/12/2023, 3:01:50 PM