Springcloud集成实名认证

397 阅读1分钟

这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战

真实身份验证

随着移动互联网的的发展,非常多的企业的APP都涉及到个人身份证信息的输入认证(即实名认证),如果手动去输入身份证号码和姓名,速度非常慢,且用户体验非常差。为了提高在移动终端上输入身份证信息的速度和准确性,需要使用身份证OCR识别技术,以满足各行业应用需求,给用户带来更好的体验。

为了方便实现,直接引入的阿里的OCR,首先上传身份证照片到OSS。验证时需要正面和反面验证,两面结果都通过才算通过。

流程图

阿里云有非常多的且好用的SDK,其中阿里云的OCR用起来还不错,我在springcloud中集成了阿里云的OCR,具体流程图如下:

sequenceDiagram
UserService -->UserTask: userTask.uploadId2Oss上传身份证正反面到oss服务
UserTask --> AliyunService: aliyunService.getOssClient获取Oss客户端
AliyunService --> AliyunService: AliyunService.getSts获取STS认证
AliyunService --> OSSClientBuilder: oSSClientBuilder.build构建阿里云OSS客户端
OSSClientBuilder --> AliyunService: 根据credentials返回阿里云OSS客户端
AliyunService --> UserTask: 返回ossClient
UserTask --> UserTask: ossClient.putObject上传身份证正面信息
UserTask --> UserTask: ossClient.putObject上传身份证反面信息
UserTask --> UserService: 返回上传结uploadId2OssFuture
UserService --> UserTask: userTask.getIdFrontResult获取身份证正面验证结果
UserTask --> OcrUtil: OcrUtil.doPost请求获取身份证OCR结果
OcrUtil --> UserTask: userTask.getCardOcrResult返回身份证OCR结果
UserTask --> UserService: idFrontResultFuture返回身份证OCR结果
UserService --> UserService: GetCardOcrResultModel返回身份证OCR结果

代码实现

maven依赖
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.1.0</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>3.5.0</version>
</dependency>
集成SDK
void uploadIdFront2Oss(String userId, MultipartFile idFrontFile, OSS ossClient, Example example) throws IOException {
		log.info("上传身份证正面到阿里云OSS开始");
		StringBuilder objectName = new StringBuilder(aliyunOssProperties.getIdFrontImgPath());
		objectName.append(userId).append("/").append(System.currentTimeMillis()).append(".jpg");
		ossClient.putObject(aliyunOssProperties.getBucketName(), objectName.toString(), idFrontFile.getInputStream());
		log.info("上传身份证正面到阿里云OSS结束");

}


private String getCardOcrResult(MultipartFile file){
	log.info("获取身份证OCR结果开始");
	String imageBase64 = OcrUtil.multipartFileToBase64(file);
	OcrRequestModel<CardOcrImageInfoModel> ocrRequestModel = new OcrRequestModel<>();
	CardOcrImageInfoModel cardOcrImageInfoModel = new CardOcrImageInfoModel();
	cardOcrImageInfoModel.setImageContent(imageBase64);
	ocrRequestModel.setImageInfo(cardOcrImageInfoModel);
	String response = OcrUtil.doPost(ocrProperties.getAccessId(), ocrProperties.getAccessKey(), ocrProperties.getUrl513(), ocrRequestModel);
	log.info("获取身份证OCR结果结束,返回结果: {}", response);
	return response;
}

总结

首先需要在阿里云开通OCR。然后引入maven依赖,配置阿里云信息,之后就可以调用API了,需要注意的是身份证正反面有特殊汉字时候会识别错误。

参考