实名认证 —— 腾讯云身份证认证接口

目录

引言:

流程分析:

前置操作:

接口定义:


引言:

用户在注册成功之后,应该引导他去做实名认证,这就需要用到腾讯云身份证识别和云存储功能了

身份证识别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相关依赖:

XML 复制代码
<dependency>
    <groupId>com.tencentcloudapi</groupId>
    <artifactId>tencentcloud-sdk-java</artifactId>
    <version>${tencentcloud.version}</version>
</dependency>

还需引入自定义配置类,可见下面博客前置操作:腾讯云对象存储服务COS-CSDN博客

接口定义:

首先定义一个识别操作的Controller:

java 复制代码
@Tag(name = "腾讯云识别接口管理")
@RestController
@RequestMapping(value="/ocr")
@SuppressWarnings({"unchecked", "rawtypes"})
public class OcrController {
	
    @Autowired
    private OcrService ocrService;

    @Operation(summary = "身份证识别")
    @PostMapping("/idCardOcr")
    public Result<IdCardOcrVo> idCardOcr(@RequestPart("file") MultipartFile file) {
        IdCardOcrVo idCardOcrVo = ocrService.idCardOcr(file);
        return Result.ok(idCardOcrVo);
    }
}

随后在Service实现业务逻辑:

实现步骤:

  1. 先将图片转换成base64编码格式字符串。

  2. 按照腾讯官方文档格式,校验身份证信息:

    java 复制代码
    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());
            }
        }
    }
  3. 将返回结果resp内的属性值付给idCardOcrVo后,上传身份证正面图片到腾讯云COS。

java 复制代码
@Slf4j
@Service
@SuppressWarnings({"unchecked", "rawtypes"})
public class OcrServiceImpl implements OcrService {

    @Autowired
    private TencentCloudProperties tencentCloudProperties;
    
    @Autowired
    private CosService cosService;
    // 身份证识别
    @Override
    public 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());

                // 上传身份证正面图片到腾讯云cos
                CosUploadVo 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());
                // 上传身份证反面图片到腾讯云cos
                CosUploadVo 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:

java 复制代码
@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);
}
相关推荐
Clownseven2 小时前
云市场周报 (2025.08.06):腾讯云开学季、阿里云OSS降价及市场格局分析
阿里云·云计算·腾讯云
记得开心一点嘛2 小时前
实名认证 —— 腾讯云驾驶证识别接口
云计算·腾讯云
Johny_Zhao8 小时前
SeaTunnel的搭建部署以及测试
linux·网络·网络安全·信息安全·kubernetes·云计算·containerd·devops·seatunnel·系统运维
思绪漂移11 小时前
从博客到播客:文本转音频的全流程技术点
人工智能·音频·腾讯云·信息传播
云和数据.ChenGuang12 小时前
envFrom 是一个 列表类型字段bug
大数据·云原生·容器·kubernetes·云计算·bug
Elastic 中国社区官方博客13 小时前
升级 Elasticsearch 到新的 AWS Java SDK
java·大数据·elasticsearch·搜索引擎·云计算·全文检索·aws
AOwhisky16 小时前
云计算一阶段Ⅱ——12. SELinux 加固 Linux 安全
linux·安全·云计算
记得开心一点嘛19 小时前
实名认证 —— 腾讯云人脸识别接口
云计算·腾讯云
INFINI Labs1 天前
Easysearch 集成阿里云与 Ollama Embedding API,构建端到端的语义搜索系统
阿里云·云计算·openai·embedding·easysearch