基于JavaScript短信验证码如何实现
我们在使用移动、电信等运营商网上营业厅的时候,为确保业务的完整和正确性,经常会需要用到短信的验证码。最近因为某省业务需要,也做了个类似的功能。
原理很简单,就是在用户点击"获取验证码"的时候,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位随机验证码
functionrandom(){
varnum="";
for(i=0;i<6;i++){
num=num+Math.floor(Math.random()*10);
}
returnnum;
}
//验证码有效期倒计时
functionRemainTime(){
variSecond;
varsSecond="",sTime="";
if(iTime>=0){
iSecond=parseInt(iTime%300);
if(iSecond>=0){
sSecond=iTime+"秒";
}
sTime="<spanstyle='color:darkorange;font-size:13px;'>"+sSecond+"</span>";
if(iTime==0){
clearTimeout(Account);
sTime="<spanstyle='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短信验证码如何实现的详细介绍,希望对大家有所帮助。