# OCR识别服务
结构化识别卡片证件照,目前只支持二代身份证以及营业执照(其他证件照待更新)。
# 一、请求说明
请求地址:http://api.spiderid.cn/api/router/rest,https://api.spiderid.cn/api/router/rest
服务接口名称(即公共参数method的值): biz.ocr.recognition
请求方式:POST
# 二、请求参数
- 请求参数以表单形式提交,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识别服务只支持传入二代身份证以及营业执照,即imageType
为IDCARD
和BUSINLICENCE
(其他证件类型待更新)
- 二代身份证(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");
}