zoukankan      html  css  js  c++  java
  • 短信验证码实现

         我们在使用移动、电信等运营商网上营业厅的时候,为确保业务的完整和正确性,经常会需要用到短信的验证码。最近因为某省业务需要,也做了个类似的功能。
        原理很简单,就是在用户点击"获取验证码"的时候,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,看是否存在,如果不存在肯定就是过期了。如果后续业务扩展可能会考虑加上数据库的有效期验证,以及一些其它的规则,比如一小时、一天内限制发送验证码的条数(总不能让你无限制的发送短信吧) 等等。

    作者:牦牛
    出处:http://maoniu602.cnblogs.com/
    关于:我等因无形而恐惧,于是挥下刀刃,以假面之名......
    说明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    WCF-配置
    乡下人生活录——程序员给自己买份保险吧
    Sqlserver表分区
    Oracle通过Navicat导入表数据与机构,数据无法直接查询,需要加双引号的问题
    19.Imagetragick 命令执行漏洞(CVE-2016–3714)
    18.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
    17.[CVE-2017-12615]Tomcat任意文件上传漏洞
    16.Tomcat弱口令 && 后台getshell漏洞
    15.Nginx 解析漏洞复现
    14.Nginx 文件名逻辑漏洞(CVE-2013-4547)
  • 原文地址:https://www.cnblogs.com/maoniu602/p/2302472.html
Copyright © 2011-2022 走看看