我们在使用移动、电信等运营商网上营业厅的时候,为确保业务的完整和正确性,经常会需要用到短信的验证码。最近因为某省业务需要,也做了个类似的功能
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
我们在使用移动、电信等运营商网上营业厅的时候,为确保业务的完整和正确性,经常会需要用到短信的验证码。最近因为某省业务需要,也做了个类似的功能。
原理很简单,就是在用户点击 "获取验证码" 的时候,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 短信验证码如何实现的详细介绍,希望对大家有所帮助。
来源: http://www.phperz.com/article/17/0216/267429.html