流水不争先,争的是滔滔不绝

即时通讯中手机验证码的实现

IM安全 macgrady 27℃

手机验证码注册申请是大家常会遇到的一种注册方式,采取手机用户验证码的设置是为了防止用户恶意登录和注册,需要验证用户身份而专门设置的安全机制。如此设置不仅提高了用户账号的真实性,同时避免了重复注册,恶意访问造成的数据拥堵。那么手机验证码在APP中是如何实现的呢?手机验证码的实现原理又是什么呢?欢迎大家加QQ技术交流群一起讨论,QQ:864830476. ,另外 IM产品全部打包出售,详情咨询请加 QQ:340554038。

手机验证码登录的实现过程:在APP中点击“发送短信验证码”,即向后台发送一个验证码请求,后台收到请求,生成一组随机数字(验证码)并保存,服务器将其编译成有时间限制的手机验证码并通过短信服务商发送至用户手机。用户将手机验证码在有效时间内输入到APP中完成注册,后台校验其验证码信息是否一致,一致时注册成功,否则注册失败。

具体实现过程:

1.使用random函数随机生成一个验证码,位数自定义。(一般设为4位、6位验证码)

2.调用短信运营商的接口,并向其发送手机号和验证码数据。

3. 运营商经过审核,将信息发送到用户手机。(短信接口的参数一般包括:目标手机号,随机验证码(或包含失效时间),平台接口地址,平台口令等;)

4.网站或app保存接口返回的信息

5.服务器端会将这些信息保存在会话控制器Session中,作为后期的验证使用。

6.网站/APP接收用户填写的验证码信息

7.服务器端判断用户提交的验证码是否与储存在会话控制器Session中的信息一致,如果一致就通过;否则就验证失败。 

1.首先添加一个jar包,工具类会用到

<dependency>

  <groupId>commons-codec</groupId>

  <artifactId>commons-codec</artifactId>

  <version>1.11</version>

</dependenc

2.编写http请求工具类

public class HttpUtil

{

   /**

    * 构造通用参数timestamp、sig和respDataType

    *

    * @return

    */

   public static String createCommonParam()

   {

      // 时间戳

      SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMddHHmmss”);

      String timestamp = sdf.format(new Date());

      // 签名

    */

   public static String post(String url, String body)

   {

         // 设置连接参数

         conn.setDoOutput(true);

         conn.setDoInput(true);

         conn.setConnectTimeout(5000);

         conn.setReadTimeout(20000);

               firstLine = false;

            } else

            {

         // 提交数据

         out = new OutputStreamWriter(conn.getOutputStream(), “UTF-8”);

         out.write(body);

         out.flush();

3.、生成四位数的方法

public static String runNumber() {

   String str=”ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789″;

   StringBuilder sb=new StringBuilder(4);

   for(int i=0;i<4;i++)

   {

      char ch=str.charAt(new Random().nextInt(str.length()));

      sb.append(ch);

   }

   System.out.println(sb.toString());

   String code = sb.toString();

   return code;

}

4、执行方法execute(),便会发送成功

public class IndustrySMS

{

   private static String operation = “/industrySMS/sendSMS”;

   private static String accountSid = Config.ACCOUNT_SID;

   private static String to = “15342349382”;

  private static String smsContent = “【即时通讯】登录验证码:{“+runNumber().toString()+”},如非本人操作,请忽略此短信。”;

   

版权声明:本文为CSDN博主「Java架构师公社」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_50205273/article/details/108647115

版权声明:部分文章、图片等内容为用户发布或互联网整理而来,仅供学习参考。如有侵犯您的版权,请联系我们,将立刻删除。
点击这里给我发消息