php实现短信倒计时验证框架

<?PHP
class CheckReg {
	private $code; 
	const outtime = 30;  //超时时间 
	
	function __construct()
	{
		session_start();
		$this->code = "";	
	}
	
	//用户名
	public function CheckUser(&$err)
	{
		$err = "";
		if (!isset($_POST['user']))
		{
			$err = "请设置用户名";
		}
		else if (strlen($_POST['user']) > 15 || strlen($_POST['user']) < 3)	
		{
			$err = "长度必须在3到15个字符之间";
		}		
		$_SESSION['user'] = $_POST['user'];
		return $err == null ? true : false;
	}
		
	//手机号
	public function CheckPhone(&$err, $IsReg)
	{
		$err = "";
		if (!isset($_POST['tel']))
		{
			$err = "请输入手机号";
		}
		else if (!is_numeric($_POST['tel']))
		{
			$err = "手机号位数不够";
		}
		else if (!preg_match("/^1[34578]{1}\d{9}$/", $_POST['tel']))
		{
			$err = "非法手机号";
		}
		else if ($IsReg && isset($_SESSION['tel']) && $_SESSION['tel'] != $_POST['tel'])
		{
			$err = "手机号更改,要重新发送验证码";
		}
		else
		{
			$_SESSION['tel'] = $_POST['tel'];
			$_SESSION['verify'] = rand(1000, 9999);
			$_SESSION['date'] = time();
		}
		return $err == null ? true : false;
	} 
	
	//验证码
	public function CheckVerify(&$err)
	{
		$err = "";
		if (!isset($_SESSION['verify']) || !isset($_SESSION['date']))
		{
			$err = "请点击发送验证";	
		}
		else if (!isset($_POST['verify']))
		{
			$err = "请输入验证码";
		}
		else if ($_POST['verify'] != $_SESSION['verify'])
		{
			$err = "验证码输入不正确";
		}
		else if ( self::outtime < (time() - $_SESSION['date']))
		{
			$err = "验证码输入超时,请重新发送验证码";
		}
		return $err == null ? true : false;
	}
	
	//密码	
	public function CheckCode(&$err)
	{
		$err = "";
		if (!isset($_POST["code"]))
		{
			$err = "请输入置密码";
		}		
		else if (strlen($_POST["code"]) < 6 || strlen($_POST["code"]) > 20)
		{
			$err = "密码长度必须介于6-20个字符";
		} 
		
		if ($err != null)
		{
			if (isset($_SESSION['code']))
				unset($_SESSION['code']);
			if (isset($_SEESION['verifycode']))
				unset($_SESSION['verifycode']);	
		}
		else
		{
			$_SESSION['code'] = $_POST["code"];
		}
		return $err == null ? true : false;
	}
		
	//重复密码
	public function CheckVerifycode(&$err)
	{
		$err = "";
		if (!isset($Post["verifycode"]))
		{
			$err = "请再次输入密码";
		}
		else if (!isset($_SESSION['code']))
		{
			$err = "请先在上面对话框输入密码";
		}
		else if ($Post["verifycode"] !=  $_SESSION['code'])
		{
			$err = "两次密码输入不一致";
		} 
		
		if ($err != null)
		{
			if (isset($_SESSION['verifycode']))
				unset($_SESSION['verifycode']);	
		}
		else
		{
			$_SESSION['verifycode'] = $_POST["verifycode"];
		}
		return $err == null ? true : false;
	}
	
	public function UnsetSession()
	{
		if (isset($_SESSION['user']))
		{
			unset($_SESSION['user']);	
		}
		if (isset($_SESSION['tel']))
		{
			unset($_SESSION['tel']);	
		}
		if (isset($_SESSION['code']))
		{
			unset($_SESSION['code']);	
		}
		if (isset($_SESSION['verifycode']))
		{
			unset($_SESSION['verifycode']);	
		}
		if (isset($_SESSION['verify']))
		{
			unset($_SESSION['verify']);	
		}
		if (isset($_SESSION['date']))
		{
			unset($_SESSION['date']);	
		}
	}
	
	public function GetOutTime()
	{
		return self::outtime;
	}
	
	public function GetVar($var)
	{
		return isset($_SESSION[$var]) ? $_SESSION[$var] : "";
	}
}


?>



<!DOCTYPE HTML>   
<html>  
<head>  
<meta charset="utf-8">  
<title></title>  
<style>  
.error {color: #FF0000;}  
</style>  
</head>  
<body>   
<?php  
// 定义变量并默认设置为空值  
include_once("./SendTemplateSMS.php");  
include_once("./CheckReg.php");  

$checkreg = new CheckReg();

$usererr = "";
$telErr = "";   //号码错误说明  
$codeerr = "";
$verifycodeerr = "";
$verifyerr = "";
$ok = 0;        //号码输入成功标记  
$code = "";
$verifycode = "";

if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["submit"]))  
{  
    if ($_POST["submit"] == "获取验证码")  
    {  
        if (isset($_POST["tel"]) && $checkreg->checkPhone($telErr, 0))  
        {  
            //需要验证号码正确与否  
            $ok = 1;  
            sendTemplateSMS($_POST["tel"], array($checkreg->GetVar('verify'), $checkreg->GetOutTime()),"1");  //发短信  
        }  
    }  
    else if ($_POST["submit"] == "注册")  
    {     
        if ($checkreg->checkUser($usererr) 
			&& $checkreg->checkPhone($telErr, 1)
            && $checkreg->CheckVerify($verifyerr)
            && $checkreg->CheckCode($codeerr)  
            && $checkreg->CheckVerifycode($verifycodeerr))  
        {  
            echo "注册成功"; 
			$checkreg->UnsetSession();     
        }  
        else  
        {  
            echo "注册失败";      
        }    
    }  
}  
?>  
  
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" >   
   用户名(3~15个字符):<input type="text" name="user" value="<?php echo $checkreg->GetVar("user");?>" > <span class="error"> * <?php echo $usererr;?></span> <br> 
   手机号:<input type="text" name="tel" value="<?php echo $checkreg->GetVar("tel");?>" > <span class="error"> * <?php echo $telErr;?></span> <br>  
   手机验证码: <input type="text" name="verify"> <input type="submit" name="submit" value="获取验证码" > <span class="error"> * <?php echo $verifyerr;?></span> <br>  
   密码(6-20位字符):<input type="text" name="code" value="<?php echo $checkreg->GetVar("code");?>" > <span class="error"> * <?php echo $codeerr;?></span> <br>  
   确认密码:<input type="text" name="verifycode" value="<?php echo $checkreg->GetVar("verifycode");?>"> <span class="error"> * <?php echo $verifycodeerr;?></span> <br>  
   <input type="submit" name="submit" value="注册">   
</form>  
  
<script type="text/javascript">   
var countdown=<?php echo $outtime; ?>;   
var first = 1;  
function settime() {   
    if (countdown == 0) {   
        document.getElementsByName("submit")[0].removeAttribute("disabled");      
        document.getElementsByName("submit")[0].value="获取验证码";   
        countdown = <?php echo $outtime; ?>;   
        return;  
    } else {   
        document.getElementsByName("submit")[0].setAttribute("disabled", true);   
        document.getElementsByName("submit")[0].value="重新发送(" + countdown + ")";   
        countdown--;   
    }   
    setTimeout(function() {   
        settime() }  
        ,1000)   
}  
<?php   
if ($ok == 1)  
{?>  
    console.log("1");  
    settime();    
<?php   
}  
?>  
</script>  
</body>  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值