实名认证 —— 腾讯云身份证认证接口
目录
引言:
流程分析:
前置操作:
接口定义:
引言:
用户在注册成功之后,应该引导他去做实名认证,这就需要用到腾讯云身份证识别和云存储功能了
身份证识别API地址:文字识别 身份证识别_腾讯云本文档介绍了腾讯云OCR接口IDCardOCR的功能、使用方法及开发者资源。该接口支持中国大陆二代身份证正反面所有字段的高精度识别(准确度99%以上),并提供身https://cloud.tencent.com/document/product/866/33524
腾讯云文字识别(Optical Character Recognition,OCR )基于行业前沿的深度学习技术,将图片上的文字内容智能识别成为可编辑的文本。支持通用文字、卡证文字、票据单据、特定场景等多场景下的印刷体、手写体文字识别,同时支持票据核验功能,支持提供定制化服务,可以有效地代替人工录入信息。
流程分析:
文档地址:身份证识别 - 腾讯云腾讯云为数百万的企业和开发者提供安全、稳定的云服务器、云主机、CDN、对象存储、域名注册、云存储、云数据库等云服务,帮助用户解决游戏、视频、移动、微信、互联网+等行业的架构难题,是全球领先的云计算服务商。https://console.cloud.tencent.com/api/explorer?Product=ocr&Version=2018-11-19&Action=IDCardOCR
前置操作:
引入ocr相关依赖:
<dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>${tencentcloud.version}</version>
</dependency>
还需引入自定义配置类,可见下面博客前置操作:腾讯云对象存储服务COS-CSDN博客
接口定义:
首先定义一个识别操作的Controller:
@Tag(name = "腾讯云识别接口管理")
@RestController
@RequestMapping(value="/ocr")
@SuppressWarnings({"unchecked", "rawtypes"})
public class OcrController {@Autowiredprivate OcrService ocrService;@Operation(summary = "身份证识别")@PostMapping("/idCardOcr")public Result<IdCardOcrVo> idCardOcr(@RequestPart("file") MultipartFile file) {IdCardOcrVo idCardOcrVo = ocrService.idCardOcr(file);return Result.ok(idCardOcrVo);}
}
随后在Service实现业务逻辑:
实现步骤:
- 先将图片转换成base64编码格式字符串。
- 按照腾讯官方文档格式,校验身份证信息:
public class Sample {public static void main(String [] args) {try{// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密// 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性// 以下代码示例仅供参考,建议采用更安全的方式来使用密钥// 请参见:https://cloud.tencent.com/document/product/1278/85305// 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取Credential cred = new Credential(System.getenv("TENCENTCLOUD_SECRET_ID"), System.getenv("TENCENTCLOUD_SECRET_KEY"));// 使用临时密钥示例// Credential cred = new Credential("SecretId", "SecretKey", "Token");// 实例化一个http选项,可选的,没有特殊需求可以跳过HttpProfile httpProfile = new HttpProfile();httpProfile.setEndpoint("ocr.tencentcloudapi.com");// 实例化一个client选项,可选的,没有特殊需求可以跳过ClientProfile clientProfile = new ClientProfile();clientProfile.setHttpProfile(httpProfile);// 实例化要请求产品的client对象,clientProfile是可选的OcrClient client = new OcrClient(cred, "ap-guangzhou", clientProfile);// 实例化一个请求对象,每个接口都会对应一个request对象IDCardOCRRequest req = new IDCardOCRRequest();// 返回的resp是一个IDCardOCRResponse的实例,与请求对象对应IDCardOCRResponse resp = client.IDCardOCR(req);// 输出json格式的字符串回包System.out.println(AbstractModel.toJsonString(resp));} catch (TencentCloudSDKException e) {System.out.println(e.toString());}} }
- 将返回结果resp内的属性值付给idCardOcrVo后,上传身份证正面图片到腾讯云COS。
@Slf4j
@Service
@SuppressWarnings({"unchecked", "rawtypes"})
public class OcrServiceImpl implements OcrService {@Autowiredprivate TencentCloudProperties tencentCloudProperties;@Autowiredprivate CosService cosService;// 身份证识别@Overridepublic IdCardOcrVo idCardOcr(MultipartFile file) {try{// 图片转换base64格式字符串byte[] base64 = Base64.encodeBase64(file.getBytes());String fileBase64 = new String(base64);// 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密Credential cred = new Credential(tencentCloudProperties.getSecretId(),tencentCloudProperties.getSecretKey());// 实例化一个http选项,可选的,没有特殊需求可以跳过HttpProfile httpProfile = new HttpProfile();httpProfile.setEndpoint("ocr.tencentcloudapi.com");// 实例化一个client选项,可选的,没有特殊需求可以跳过ClientProfile clientProfile = new ClientProfile();clientProfile.setHttpProfile(httpProfile);// 实例化要请求产品的client对象,clientProfile是可选的OcrClient client = new OcrClient(cred,tencentCloudProperties.getRegion(), clientProfile);// 实例化一个请求对象,每个接口都会对应一个request对象IDCardOCRRequest req = new IDCardOCRRequest();//设置文件req.setImageBase64(fileBase64);// 返回的resp是一个IDCardOCRResponse的实例,与请求对象对应IDCardOCRResponse resp = client.IDCardOCR(req);// 转换为IdCardOcrVo对象IdCardOcrVo idCardOcrVo = new IdCardOcrVo();if (StringUtils.hasText(resp.getName())) {// 身份证正面idCardOcrVo.setName(resp.getName());idCardOcrVo.setGender("男".equals(resp.getSex()) ? "1" : "2");idCardOcrVo.setBirthday(DateTimeFormat.forPattern("yyyy/MM/dd").parseDateTime(resp.getBirth()).toDate());idCardOcrVo.setIdcardNo(resp.getIdNum());idCardOcrVo.setIdcardAddress(resp.getAddress());// 上传身份证正面图片到腾讯云cosCosUploadVo cosUploadVo = cosService.upload(file, "idCard");idCardOcrVo.setIdcardFrontUrl(cosUploadVo.getUrl());idCardOcrVo.setIdcardFrontShowUrl(cosUploadVo.getShowUrl());} else {// 身份证反面// 证件有效期:"2010.07.21-2020.07.21"String idcardExpireString = resp.getValidDate().split("-")[1];idCardOcrVo.setIdcardExpire(DateTimeFormat.forPattern("yyyy.MM.dd").parseDateTime(idcardExpireString).toDate());// 上传身份证反面图片到腾讯云cosCosUploadVo cosUploadVo = cosService.upload(file, "idCard");idCardOcrVo.setIdcardBackUrl(cosUploadVo.getUrl());idCardOcrVo.setIdcardBackShowUrl(cosUploadVo.getShowUrl());}return idCardOcrVo;} catch (Exception e) {throw new GuiguException(ResultCodeEnum.DATA_ERROR);}}
}
随后编写feign:
@FeignClient(value = "service-driver")
public interface OcrFeignClient {/*** 身份证识别* @param file* @return*/@PostMapping(value = "/ocr/idCardOcr", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)Result<IdCardOcrVo> idCardOcr(@RequestPart("file") MultipartFile file);
}