軟件開發中的驗證碼

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"); }
  });

function random() {
    var num = "";
    for (i = 0; i < 6; i++) {
        num = num + Math.floor(Math.random() * 10);

    }

}

 

<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,看是否存在,如果不存在肯定就是過期了。如果後續業務擴展可能會考慮加上數據庫的有效期驗證,以及一些其它的規則,比如一小時、一天內限制發送驗證碼的條數(總不能讓你無限制的發送短信吧) 等等。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章