为网站添加短信验证码

作者: aries 分类: PHP 发布时间: 2013-09-30 16:49 ė 2306次浏览 6 2评论

我们在一些网站注册的时候,为确保业务的完整和正确性,防止恶意注册,经常会需要用到短信的验证码。但是他是怎么实现的呢?

原理很简单,就是在用户点击"获取验证码"的时候,在前台或者后台(ajax)获取一串固定位数的数字,然后写数据库发短信,写cookie设置验证码的有效期。

JS请求验证码如下:

$.ajax({
      type: "GET",
      url: "sms.php?phone=" + phone.val() + "&smscode=" + random(),
      success: function(result) {
          if (result == "__success__") {
             alert("验证码已发送至您输入的手机号!有效期5分钟");
             time_countdown();
          }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;
}
//验证码有效期倒计时
var iTime = 60 ,Account;
function time_countdown() {
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("time_countdown()", 1000);
}
iTime = iTime - 1;
}
$("#endtime").html(sTime);
}

前端的基本工作完成。

下面看后端的:

<?php
$sms = $_GET['sms'];
if(strlen($sms)!==6){
    $sms = create_sms_code(); //如果JS生成的随机码不符,再生成随机码
} 
//还需要一些安全检测,这里就省略了 create_sms_code也省略
//写短信数据,发SMS
//写Cookie,设置验证码有效期,比如5分钟
//注:如果以上都处理成功,返回"Y",处理失败,返回"N"

这里为了方便,验证码的有效期验证就用Cookie来完成。在业务提交的时候,会获取客户端的这个Cookie,看是否存在,如果不存在肯定就是过期了。
如果后续业务扩展可能会考虑加上数据库的有效期验证,以及一些其它的规则,比如一小时、一天内限制发送验证码的条数(总不能让你无限制的发送短信吧)
等等。

0 phpsms短信验证码
换一个
  1. aries 2013-10-03 10:43:20

    随便一个API都可以,只要能发短信就行了^_^

  2. 一堵墙 2013-10-03 08:35:25

    短信发送的部分应该是用网建那个短信发送的 API 吧。

Ɣ回顶部