我們在使用移動、電信等運營商網上營業廳的時候,為確保業務的完整和正確性,經常會需要用到短信的驗證碼。最近因為某省業務需要,也做了個類似的功能。
原理很簡單,就是在用戶點擊"獲取驗證碼"的時候,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,看是否存在,如果不存在肯定就是過期了。如果後續業務擴展可能會考慮加上數據庫的有效期驗證,以及一些其它的規則,比如一小時、一天內限制發送驗證碼的條數(總不能讓你無限制的發送短信吧) 等等。
以上所述是針對JavaScript短信驗證碼如何實現的詳細介紹,希望對大家有所幫助。