基于JavaScript短信验证码如何实现


Posted in Javascript onJanuary 24, 2016

我们在使用移动、电信等运营商网上营业厅的时候,为确保业务的完整和正确性,经常会需要用到短信的验证码。最近因为某省业务需要,也做了个类似的功能。

原理很简单,就是在用户点击"获取验证码"的时候,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短信验证码如何实现的详细介绍,希望对大家有所帮助。

Javascript 相关文章推荐
javascript TextArea动态显示剩余字符
Oct 22 Javascript
Javascript 的addEventListener()及attachEvent()区别分析
May 21 Javascript
JavaScript类和继承 this属性使用说明
Sep 03 Javascript
输入框过滤非数字的js代码
Sep 18 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
May 13 Javascript
Javascript 函数的四种调用模式
Nov 05 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
Jun 11 Javascript
详解JS函数stack size计算方法
Jun 18 Javascript
JavaScript常见事件对象与操作实例总结
Jan 05 Javascript
详解vue的数据劫持以及操作数组的坑
Apr 18 Javascript
JS Web Flex弹性盒子模型代码实例
Mar 10 Javascript
Vite和Vue CLI的优劣
Jan 30 Vue.js
详解JS面向对象编程
Jan 24 #Javascript
js中实现字符串和数组的相互转化详解
Jan 24 #Javascript
JavaScript基础知识之方法汇总结
Jan 24 #Javascript
Javascript实现单例模式
Jan 24 #Javascript
原生JavaScript实现滚动条效果
Mar 24 #Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
Jan 23 #Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
Jan 23 #Javascript
You might like
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
extjs 为某个事件设置拦截器
2010/01/15 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
php使用递归与迭代实现快速排序示例
2014/01/23 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
numpy 声明空数组详解
2019/12/05 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
Python 创建TCP服务器的方法
2020/07/28 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
驾驶员安全责任书
2014/07/22 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
综合素质自我评价评语
2015/03/06 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
主持稿开场白
2015/06/01 职场文书
教师研修随笔感言
2015/11/18 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
mysql事务对效率的影响分析总结
2021/10/24 MySQL
python画条形图的具体代码
2022/04/20 Python