VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > PHP >
  • php实现的IMEI限制的短信验证码发送类

本文给大家分享的是可以检验手机号码与IMEI的短信验证码发送的php类,十分的实用,这里推荐给大家,有需要的小伙伴可以参考下。

php实现的IMEI限制的短信验证码发送类

  1. <?php 
  2. class Api_Sms{ 
  3.   const EXPIRE_SEC = 1800;    // 过期时间间隔 
  4.   const RESEND_SEC = 60;     // 重发时间间隔 
  5.   const ONE_DAY_FREQ = 5;    // 每日向同一个手机号发短信的次数 
  6.   const ONE_DAY_IMEI_COUNT = 3; // 每日向同一个手机号发送短信的IMEI个数 
  7.    
  8.   public $error = array(); 
  9.    
  10.    
  11.   /** 
  12.    * 向指定手机号发送验证码 
  13.    * @param $mobile 
  14.    * @param $imei 
  15.    * @return bool 
  16.    */ 
  17.   public function sendVerifyCode($mobile$imei) { 
  18.     if(!$this->isMobile($mobile)) { 
  19.       $this->error = array('code' => -1, 'msg' => '这个手机号很奇葩哦,请正确输入后重试'); 
  20.       return false; 
  21.     } 
  22.    
  23.     $redis = Api_Common::redis(); 
  24.     $vcKey = 'VC_'.$mobile
  25.     $limitKey = 'VC_LIMIT_'.$mobile
  26.    
  27.     // 验证码重发限制 
  28.     $data = json_decode($redis->get($vcKey), true); 
  29.     if($data && time() < $data['resend_expire']) { 
  30.       $this->error = array('code' => -1, 'msg' => '短信已在1分钟内发出,请耐心等待'); 
  31.       return false; 
  32.     } 
  33.    
  34.     // 手机号及IMEI限制 
  35.     $sendCnt = $redis->zScore($limitKey$imei); 
  36.     if($sendCnt && $sendCnt >= self::ONE_DAY_FREQ) { 
  37.       $this->error = array('code' => -1, 'msg' => '没收到短信?请稍等或检查短信是否被屏蔽'); 
  38.       return false; 
  39.     } 
  40.     $imeiCnt = $redis->zCard($limitKey); 
  41.     if($imeiCnt >= self::ONE_DAY_IMEI_COUNT && !$sendCnt) { 
  42.       $this->error = array('code' => -1, 'msg' => '已超过验证码发送设备限制'); 
  43.       return false; 
  44.     } 
  45.    
  46.     // 获取验证码 
  47.     if(!$data) { 
  48.       $vc = strval(rand(100000, 999999)); 
  49.       $data = array('vc' => $vc'resend_expire' => 0); 
  50.       $redis->set($vcKey, json_encode($data)); 
  51.       $redis->expire($vcKey, self::EXPIRE_SEC); // 设置验证码过期时间 
  52.     } 
  53.     $vc = $data['vc']; 
  54.    
  55.     $content = '安全验证码:'.$vc
  56.     $result = $this->send($mobile$content); 
  57.     if($result) { 
  58.       // 重设重发时限 
  59.       $data['resend_expire'] = time() + self::RESEND_SEC; 
  60.       $ttl = $redis->ttl($vcKey); 
  61.       $redis->set($vcKey, json_encode($data)); 
  62.       $redis->expire($vcKey$ttl); 
  63.    
  64.       // 设置手机号与IMEI限制 
  65.       $redis->zIncrBy($limitKey, 1, $imei); 
  66.       $redis->expireAt($limitKeystrtotime(date('Y-m-d',strtotime('+1 day')))); 
  67.     } 
  68.     return $result
  69.   } 
  70.    
  71.   /** 
  72.    * 向指定手机号发送短信 
  73.    * @param $mobile 
  74.    * @param $content 
  75.    * @return bool 
  76.    */ 
  77.   public function send($mobile$content){ 
  78.     // TODO 调用具体服务商API 
  79.     return true; 
  80.   } 
  81.    
  82.   /** 
  83.    * 判断是否为合法手机号 
  84.    * @param $mobile 
  85.    * @return bool 
  86.    */ 
  87.   private function isMobile($mobile) { 
  88.     if(preg_match('/^1\d{10}$/'$mobile)) 
  89.       return true; 
  90.     return false; 
  91.   } 
  92.    
  93.   /** 
  94.    * 验证短信验证码 
  95.    * @param $mobile 
  96.    * @param $vc 
  97.    * @return bool 
  98.    */ 
  99.   public function checkVerifyCode($mobile$vc) { 
  100.     $vcKey = 'VC_'.$mobile
  101.     $vcData = json_decode(Api_Common::redis()->get($vcKey), true); 
  102.     if($vcData && $vcData['vc'] === $vc) { 
  103.       return true; 
  104.     } 
  105.     return false; 
  106.   } 
  107.    
  108.   /** 
  109.    * 清除验证码 
  110.    * @param $mobile 
  111.    */ 
  112.   public function cleanVerifyCode($mobile) { 
  113.     $redis = Api_Common::redis(); 
  114.     $vcKey = 'VC_'.$mobile
  115.     $limitKey = 'VC_LIMIT_'.$mobile
  116.     $redis->del($vcKey); 
  117.     $redis->del($limitKey); 
  118.   } 

另付其他网友实现的短信验证码代码:

  1. <? 
  2. /*-------------------------------- 
  3. 功能:   中国短信网PHP HTTP接口 发送短信 
  4. 修改日期:  2009-04-08 
  5. 说明:   http://http.c123.com/tx/?uid=用户账号&pwd=MD5位32密码&mobile=号码&content=内容 
  6. 状态: 
  7.   100 发送成功 
  8.   101 验证失败 
  9.   102 短信不足 
  10.   103 操作失败 
  11.   104 非法字符 
  12.   105 内容过多 
  13.   106 号码过多 
  14.   107 频率过快 
  15.   108 号码内容空 
  16.   109 账号冻结 
  17.   110 禁止频繁单条发送 
  18.   111 系统暂定发送 
  19.   112 号码不正确 
  20.   120 系统升级 
  21. --------------------------------*/ 
  22. $uid = '9999';   //用户账号 
  23. $pwd = '9999';   //密码 
  24. $mobile = '13912341234,13312341234,13512341234,02122334444';  //号码 
  25. $content = '中国短信网PHP HTTP接口';    //内容 
  26. //即时发送 
  27. $res = sendSMS($uid,$pwd,$mobile,$content); 
  28. echo $res
  29.    
  30. //定时发送 
  31. /* 
  32. $time = '2010-05-27 12:11'; 
  33. $res = sendSMS($uid,$pwd,$mobile,$content,$time); 
  34. echo $res; 
  35. */ 
  36. function sendSMS($uid,$pwd,$mobile,$content,$time='',$mid=''
  37.   $http = 'http://http.c123.com/tx/'
  38.   $data = array 
  39.     ( 
  40.     'uid'=>$uid,         //用户账号 
  41.     'pwd'=>strtolower(md5($pwd)),  //MD5位32密码 
  42.     'mobile'=>$mobile,        //号码 
  43.     'content'=>$content,     //内容 
  44.     'time'=>$time,    //定时发送 
  45.     'mid'=>$mid           //子扩展号 
  46.     ); 
  47.   $re= postSMS($http,$data);     //POST方式提交 
  48.   if( trim($re) == '100' ) 
  49.   { 
  50.     return "发送成功!"
  51.   } 
  52.   else 
  53.   { 
  54.     return "发送失败! 状态:".$re
  55.   } 
  56.    
  57. function postSMS($url,$data=''
  58.   $row = parse_url($url); 
  59.   $host = $row['host']; 
  60.   $port = $row['port'] ? $row['port']:80; 
  61.   $file = $row['path']; 
  62.   while (list($k,$v) = each($data))  
  63.   { 
  64.     $post .= rawurlencode($k)."=".rawurlencode($v)."&"//转URL标准码 
  65.   } 
  66.   $post = substr$post , 0 , -1 ); 
  67.   $len = strlen($post); 
  68.   $fp = @fsockopen$host ,$port$errno$errstr, 10); 
  69.   if (!$fp) { 
  70.     return "$errstr ($errno)\n"
  71.   } else { 
  72.     $receive = ''
  73.     $out = "POST $file HTTP/1.1\r\n"
  74.     $out .= "Host: $host\r\n"
  75.     $out .= "Content-type: application/x-www-form-urlencoded\r\n"
  76.     $out .= "Connection: Close\r\n"
  77.     $out .= "Content-Length: $len\r\n\r\n"
  78.     $out .= $post;    
  79.     fwrite($fp$out); 
  80.     while (!feof($fp)) { 
  81.       $receive .= fgets($fp, 128); 
  82.     } 
  83.     fclose($fp); 
  84.     $receive = explode("\r\n\r\n",$receive); 
  85.     unset($receive[0]); 
  86.     return implode("",$receive); 
  87.   } 
  88. ?>
  89.  

出处:http://www.phpfensi.com/php/20210525/15809.html


相关教程