短信验证码js实现

短信验证码实现

     我们在使用移动、电信等运营商网上营业厅的时候,为确保业务的完整和正确性,经常会需要用到短信的验证码。最近因为某省业务需要,也做了个类似的功能。

    原理很简单,就是在用户点击"获取验证码"的时候,Ajax获取一串固定位数的数字,然后写数据库发短信,写Cookie设置验证码的有效期。

    JS请求验证码如下:        

 $.ajax({

      type: "GET",

      url: "../Ajax/smsrandcodetest.ashx?phone=" + phone.val() + "&smsCodeRand=" + num,

      success: function(result) {

          if (result == "Y") {

             alert("验证码已发送至您输入的手机号!有效期5分钟");

             RemainTime();

          }

          else {

              alert("验证码获取失败!请重新获取");

          }

       },

       error: function() { alert("error"); }

  });



//获取6位随机验证码

function random() {

    var num = "";

    for (i = 0; i < 6; i++) {

        num = num + Math.floor(Math.random() * 10);

    }

    return num;

}

//验证码有效期倒计时

function RemainTime() {

    var iSecond;

    var sSecond = "", sTime = "";

    if (iTime >= 0) {

        iSecond = parseInt(iTime % 300);

        if (iSecond >= 0) {

            sSecond = iTime + "";

        }

        sTime = "<span style='color:darkorange;font-size:13px;'>" + sSecond + "</span>";

        if (iTime == 0) {

            clearTimeout(Account);

            sTime = "<span style='color:red;font-size:12px;'>验证码已过期</span>";

        }

        else {

            Account = setTimeout("RemainTime()", 1000);

        }

        iTime = iTime - 1;

    }

    $("#endtime").html(sTime);

} 



      前端要处理的工作基本如上,现在要在HttpHandler中添加逻辑了,为了防止Js生成的验证码不符规则,我们在后端重新生成一次:

if (smscoderand.Length != 6) //如果JS生成的随机码不符,则用C#生成随机码

{

   smscoderand = GetRandom();

}

//写短信数据,发SMS

//写Cookie,设置验证码有效期,比如5分钟

//注:如果以上都处理成功,返回"Y",处理失败,返回"N"

      这里为了方便,验证码的有效期验证就用Cookie来完成。在业务提交的时候,会获取客户端的这个Cookie,看是否存在,如果不存在肯定就是过期了。如果后续业务扩展可能会考虑加上数据库的有效期验证,以及一些其它的规则,比如一小时、一天内限制发送验证码的条数(总不能让你无限制的发送短信吧) 等等。

 

你可能感兴趣的:(验证码)