1.业务介绍

实名认证,说白了就是验证客户端用户的这个人真实性,可采用的第三方服务有高级点的如人脸骨骼识别,声音识别,瞳孔识别等等。我们采用简单的身份证、姓名、手机号3要素识别方式。

2.实现及代码

1.这类身份证和姓名的公共数据,我们采用聚合平台提供的公共数据服务接口,也可以接入其他公共数据服务平台。

2.登录聚合平台,进行注册和接口选用。

3.这块身份证姓名合法性验证接口服务的价格可不便宜(失败或成功都算一次,一次5毛),代码中要注意对已经认证的人进行处理,还需要防止乱刷接口。

3.代码实现

/*** 获取短信验证码** @param phone 手机号* @return 返回*/
@Override
public Object getCode(String phone) {// 获取请求IPString ip = request.getHeader("x-forwarded-for");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip) || "null".equals(ip)) {ip = "" + request.getHeader("Proxy-Client-IP");}if (ip.length() == 0 || "unknown".equalsIgnoreCase(ip) || "null".equals(ip)) {ip = "" + request.getHeader("WL-Proxy-Client-IP");}if (ip.length() == 0 || "unknown".equalsIgnoreCase(ip) || "null".equals(ip)) {ip = "" + request.getRemoteAddr();}Object attribute = session.getAttribute(ip);if (attribute == null) {session.setMaxInactiveInterval(5 * 60);session.setAttribute(ip, 1);} else {switch (attribute.toString()) {case "1":session.setAttribute(ip, 2);break;case "2":session.setAttribute(ip, 3);break;case "3":return false;}}int random = (int) ((Math.random() * 9 + 1) * 100000);String code = String.valueOf(random);String valCode = "#code#=" + random;try {CodeUtil.print(phone, valCode);} catch (Exception e) {log.error(e.getMessage());}CacheUtil.put(phone, code);return true;
}
/*** 打印请求结果** @param mobile   手机号* @param variable 模板变量*/
public static void print(String mobile, String variable) throws Exception {//发送http请求的urlString url = String.format(URL, mobile, TPL_ID, URLEncoder.encode(variable, "utf-8"), KEY);String response = doGet(url);JSONObject jsonObject = JSONObject.parseObject(response);int error_code = jsonObject.getInteger("error_code");if (error_code == 0) {JSONObject result = jsonObject.getJSONObject("result");log.info("短信验证码请求结果,result:{}", result.toJSONString());} else {log.error("短信验证码请求结果,调用接口失败,失败原因reason:{}", jsonObject.getString("reason"));throw new NullPointerException();}
}
/*** 实名认证** @param name      姓名* @param idCard    身份证号* @param userPhone 手机号* @param code      手机验证码* @return 返回*/
@Override
public boolean certification(String name, String idCard, String userPhone, String code) {Object code_cache = CacheUtil.get(userPhone);Long userId = TokenUtil.getTokenUserId();if (code == null) {log.error("实名认证:验证码为空!");return false;}if (code_cache != null) {if (!code.equals(code_cache.toString())) {log.error("实名认证:验证码不对!");return false;}} else {log.error("实名认证:验证码无缓存!");return false;}User user = this.getById(userId);user.setUserPhone(userPhone);if (user.getUserIdcard() != null) {log.error("实名认证:用户身份证号已存在!");return false;}boolean valid = IdcardUtil.isValidCard(idCard);if (name != null && valid) {boolean result = IdCardUtil.toCall(idCard, name);if (result) {user.setUserName(name);user.setUserIdcard(idCard);this.updateById(user);return true;}}log.error("实名认证:用户实名认证失败!");return false;
}
/*** 调聚合数据接口** @param idCard   身份证号* @param realname 真是姓名*/
public static boolean toCall(String idCard, String realname) {//发送http请求的urlString url = String.format(URL, KEY, idCard, realname);String response = doGet(url);System.out.println(response);JSONObject jsonObject = JSONObject.parseObject(response);int error_code = jsonObject.getInteger("error_code");if (error_code == 0) {int res = jsonObject.getJSONObject("result").getInteger("res");return res == 1;} else {return false;}
}

实名认证(二要素校验)-含手机验证码校验相关推荐

  1. 二、SpringSecurity 自定义手机验证登录方式

    简介 在上一篇文章中,我们介绍了如何搭建一套基于SpringSecuity的项目框架,并且进行了演示,本文将继续扩展项目功能,实现自定义用户登录功能. 项目源码仓库:Gitee 代码分支:lesson ...

  2. 使用Vue+ElementUI实现的手机验证码校验、倒计时和禁用效果

    一.效果展示 二.代码部分 1.html部分 <el-form-item label="手机号" prop="phone"><el-input ...

  3. 手机二要素-运营商二要素验证

    运营商二要素是验证手机号.姓名是否一致,并返回手机号基本信息,包括所在城市.邮编.区号.运营商等信息 运营商作为用户个人信息的管理者和托管者,需要保护用户的个人信息安全.为了保护用户的隐私和安全,运营 ...

  4. 什么是实名认证二三四要素?

    网络实名制的逐步严格执行,给各互联网平台带来了一定影响,一方面必须响应监管部门的号召,一方面会影响用户的体验,增加转化成本.但互联网的开放和虚拟的属性,给互联网生态带来一定的阴影,对于没有严格执行实名 ...

  5. JSP页面实现验证码校验

    文章目录 验证码校验分析 生成验证码 测试验证码 校验验证码 测试验证码校验 添加验证码刷新 在网页页面的使用中为防止"非人类"的大量操作和防止一些的信息冗余,增加验证码校验是许多 ...

  6. 手机二要素认证接口怎么用?手机号姓名验证怎么操作?

    手机二要素认证接口起源于数字手机时代,二十一世纪初期,互联网络诞生了网上电商.金融.通讯.网吧等产业,开始实行实名认证制. 手机二要素验证主要用于国内三大通信运营商业务(包括:移动.联通.电信三大运营 ...

  7. 手机二要素api接口是什么?有哪些使用场景?一文带你搞清楚

    从2003年开始,我国各地的网吧管理部门要求必须对在网吧上网的用户进行实名登记.此后,越来越多的平台开始实行网络实名制.如今,对注册用户进行身份核验已经成为各大网络平台必备的环节.但是,面对不法分子伪 ...

  8. SpringCloudAlibaba实现<实名认证-身份证二要素>

    文章目录 前言 一.购买API 二.集成身份认证 三.完成身份认证 1.接口开发前期工作 2.接口开发 前言 需求:我们输入真实姓名和身份证号就能验证,其技术在于阿里云的身份认证接口. 一.购买API ...

  9. 什么是运营商二要素验证?

    目前有许多平台需要验证您的身份信息,以减少平台遇到的各种问题,但由于许多平台验证方式不同,导致验证速度也有问题,现在有许多平台在注册时,会要求用户在平台上输入手机号码,进行验证,这就是利用运营商验证接 ...

最新文章

  1. ​京东AI研究院获QuAC机器阅读理解竞赛冠军,EL-QA模型能力业界领先
  2. 禁止PHP警告性错误
  3. mysql 5.6 cmake 安装_Cmake MySQL5.6 编译安装
  4. CheckStyle
  5. 三菱st编程手册_通过示例学习三菱ST编程(ALT指令和条件语句的使用)
  6. android分层测试,Android视图层次和性能的检测(官方)
  7. VC++的windows服务
  8. D. Beautiful numbers
  9. python open找不到文件的原因_python – logger找不到文件
  10. vue.js多页面开发 webpack.config.js 配置方式
  11. 河工计算机学院抖肩舞,来了来了!河工大版抖肩舞已上线~
  12. 浅谈 wxWindows FrameWork
  13. 修改文件 火车票买下铺_12306修改代码买下铺?12306码农太弱了吧 (转载)
  14. Java入门基础第2天《java jdk下载与安装教程》
  15. More Grounded Image Captioning by Distilling Image-Text Matching Model
  16. 使用Elasticsearch进行高效的中文搜索
  17. 强化云原生基础服务,焱融科技 YRCloudFile 与秒云完成产品兼容性互认证
  18. git 解决push报错:[rejected] master -> master (fetch first) error: failed to push some refs to
  19. 《Lynda.com XML 必备教程》(Lynda.com XML Essential Training)CFE 教程
  20. [生命科学] 生物基础实验之DNA提取

热门文章

  1. win7计算机自动关机设置在哪里设置方法,win7自动关机命令是什么 怎么设置
  2. 对扫描的pdf文件生成目录
  3. 制作自己的刷机shx文件
  4. python幂次方计算公式_【python】计算一个数得n次方?
  5. 点集配准技术(ICP、RPM、KC、CPD)
  6. excel文件导出进度条的实现
  7. 骗你不是人 硬盘传输速度提升100倍的方法
  8. 单月涨粉30w+,他们掌握引流法宝,小红书1月创作趋势是什么?
  9. 【Oracle】基础语句
  10. VM虚拟机过检测全版本