验证码

A。短信验证码实现思路

   我们在使用移动、电信等运营商网上营业厅的时候,为确保业务的完整和正确性,经常会需要用到短信的验证码。最近因为某省业务需要,也做了个类似的功能。
    原理很简单,就是在用户点击"获取验证码"的时候,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);
 
B

<script language="javascript" type="text/javascript"> 
     
     var code ; //在全局 定义验证码 
     function createCode() 
     {  
       code = ""; 
       var codeLength =4;//验证码的长度 
       var checkCode = document.getElementById("checkCode"); 
       var selectChar = new Array

(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S',

'T','U','V','W','X','Y','Z');//所有候选组成验证码的字符,当然也可以用中文的 
         
       for(var i=0;i<codeLength;i++) 
       { 
       
         
       var charIndex = Math.floor(Math.random()*36); 
       code +=selectChar[charIndex]; 
        
        
       } 

       if(checkCode) 
       { 
         checkCode.className="code"; 
         checkCode.value = code; 
        
        
        
       } 
        
     } 
      
      function validate () 
     { 
       var inputCode = document.getElementById(").value; 
       inputCode=inputCode.toUpperCase();

       if(inputCode.length <=0) 
       { 
           alert("请输入验证码!"); 
       } 
       else if(inputCode != code ) 
       { 
          alert("验证码输入错误!"); 
          createCode();//刷新验证码 
       } 
       else 
       { 
         alert("^-^ OK"); 
       } 
        
       } 
        
    </script>


    }
    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,看是否存在,如果不存在肯定就是过期了。如果后续业务扩展可能会考虑加上数据库的有效期验证,以及一些其它的规则,比如一小时、一天内限制发送验证码的条数(总不能让你无限制的发送短信吧) 等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值