php实现的IMEI限制的短信验证码发送类
php实现的IMEI限制的短信验证码发送类
<?php classApi_Sms{ constEXPIRE_SEC=1800;//过期时间间隔 constRESEND_SEC=60;//重发时间间隔 constONE_DAY_FREQ=5;//每日向同一个手机号发短信的次数 constONE_DAY_IMEI_COUNT=3;//每日向同一个手机号发送短信的IMEI个数 public$error=array(); /** *向指定手机号发送验证码 *@param$mobile *@param$imei *@returnbool */ publicfunctionsendVerifyCode($mobile,$imei){ if(!$this->isMobile($mobile)){ $this->error=array('code'=>-1,'msg'=>'这个手机号很奇葩哦,请正确输入后重试'); returnfalse; } $redis=Api_Common::redis(); $vcKey='VC_'.$mobile; $limitKey='VC_LIMIT_'.$mobile; //验证码重发限制 $data=json_decode($redis->get($vcKey),true); if($data&&time()<$data['resend_expire']){ $this->error=array('code'=>-1,'msg'=>'短信已在1分钟内发出,请耐心等待'); returnfalse; } //手机号及IMEI限制 $sendCnt=$redis->zScore($limitKey,$imei); if($sendCnt&&$sendCnt>=self::ONE_DAY_FREQ){ $this->error=array('code'=>-1,'msg'=>'没收到短信?请稍等或检查短信是否被屏蔽'); returnfalse; } $imeiCnt=$redis->zCard($limitKey); if($imeiCnt>=self::ONE_DAY_IMEI_COUNT&&!$sendCnt){ $this->error=array('code'=>-1,'msg'=>'已超过验证码发送设备限制'); returnfalse; } //获取验证码 if(!$data){ $vc=strval(rand(100000,999999)); $data=array('vc'=>$vc,'resend_expire'=>0); $redis->set($vcKey,json_encode($data)); $redis->expire($vcKey,self::EXPIRE_SEC);//设置验证码过期时间 } $vc=$data['vc']; $content='安全验证码:'.$vc; $result=$this->send($mobile,$content); if($result){ //重设重发时限 $data['resend_expire']=time()+self::RESEND_SEC; $ttl=$redis->ttl($vcKey); $redis->set($vcKey,json_encode($data)); $redis->expire($vcKey,$ttl); //设置手机号与IMEI限制 $redis->zIncrBy($limitKey,1,$imei); $redis->expireAt($limitKey,strtotime(date('Y-m-d',strtotime('+1day')))); } return$result; } /** *向指定手机号发送短信 *@param$mobile *@param$content *@returnbool */ publicfunctionsend($mobile,$content){ //TODO调用具体服务商API returntrue; } /** *判断是否为合法手机号 *@param$mobile *@returnbool */ privatefunctionisMobile($mobile){ if(preg_match('/^1\d{10}$/',$mobile)) returntrue; returnfalse; } /** *验证短信验证码 *@param$mobile *@param$vc *@returnbool */ publicfunctioncheckVerifyCode($mobile,$vc){ $vcKey='VC_'.$mobile; $vcData=json_decode(Api_Common::redis()->get($vcKey),true); if($vcData&&$vcData['vc']===$vc){ returntrue; } returnfalse; } /** *清除验证码 *@param$mobile */ publicfunctioncleanVerifyCode($mobile){ $redis=Api_Common::redis(); $vcKey='VC_'.$mobile; $limitKey='VC_LIMIT_'.$mobile; $redis->del($vcKey); $redis->del($limitKey); } }
另付其他网友实现的短信验证码代码
<? /*-------------------------------- 功能:中国短信网PHPHTTP接口发送短信 修改日期:2009-04-08 说明:http://http.c123.com/tx/?uid=用户账号&pwd=MD5位32密码&mobile=号码&content=内容 状态: 100发送成功 101验证失败 102短信不足 103操作失败 104非法字符 105内容过多 106号码过多 107频率过快 108号码内容空 109账号冻结 110禁止频繁单条发送 111系统暂定发送 112号码不正确 120系统升级 --------------------------------*/ $uid='9999';//用户账号 $pwd='9999';//密码 $mobile='13912341234,13312341234,13512341234,02122334444';//号码 $content='中国短信网PHPHTTP接口';//内容 //即时发送 $res=sendSMS($uid,$pwd,$mobile,$content); echo$res; //定时发送 /* $time='2010-05-2712:11'; $res=sendSMS($uid,$pwd,$mobile,$content,$time); echo$res; */ functionsendSMS($uid,$pwd,$mobile,$content,$time='',$mid='') { $http='http://http.c123.com/tx/'; $data=array ( 'uid'=>$uid,//用户账号 'pwd'=>strtolower(md5($pwd)),//MD5位32密码 'mobile'=>$mobile,//号码 'content'=>$content,//内容 'time'=>$time,//定时发送 'mid'=>$mid//子扩展号 ); $re=postSMS($http,$data);//POST方式提交 if(trim($re)=='100') { return"发送成功!"; } else { return"发送失败!状态:".$re; } } functionpostSMS($url,$data='') { $row=parse_url($url); $host=$row['host']; $port=$row['port']?$row['port']:80; $file=$row['path']; while(list($k,$v)=each($data)) { $post.=rawurlencode($k)."=".rawurlencode($v)."&";//转URL标准码 } $post=substr($post,0,-1); $len=strlen($post); $fp=@fsockopen($host,$port,$errno,$errstr,10); if(!$fp){ return"$errstr($errno)\n"; }else{ $receive=''; $out="POST$fileHTTP/1.1\r\n"; $out.="Host:$host\r\n"; $out.="Content-type:application/x-www-form-urlencoded\r\n"; $out.="Connection:Close\r\n"; $out.="Content-Length:$len\r\n\r\n"; $out.=$post; fwrite($fp,$out); while(!feof($fp)){ $receive.=fgets($fp,128); } fclose($fp); $receive=explode("\r\n\r\n",$receive); unset($receive[0]); returnimplode("",$receive); } } ?>
以上所述就是本文的全部内容了,希望大家能够喜欢。