ismobile($mobile)) { $this->error = array(''code'' => -1, ''msg'' => ''这个手机号很奇葩哦,请正确输入后重试''); return false; } $redis = api_common::redis(); $vckey = ''vc_''.$mobile; $limitkey = ''vc_limit_''.$mobile; // 验证码重发限制 $data = json_decode($redis->get($vckey), true); if($data && time() error = array(''code'' => -1, ''msg'' => ''短信已在1分钟内发出,请耐心等待''); return false; } // 手机号及imei限制 $sendcnt = $redis->zscore($limitkey, $imei); if($sendcnt && $sendcnt >= self::one_day_freq) { $this->error = array(''code'' => -1, ''msg'' => ''没收到短信?请稍等或检查短信是否被屏蔽''); return false; } $imeicnt = $redis->zcard($limitkey); if($imeicnt >= self::one_day_imei_count && !$sendcnt) { $this->error = array(''code'' => -1, ''msg'' => ''已超过验证码发送设备限制''); return false; } // 获取验证码 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(''+1 day'')))); } return $result; } /** * 向指定手机号发送短信 * @param $mobile * @param $content * @return bool */ public function send($mobile, $content){ // todo 调用具体服务商api return true; } /** * 判断是否为合法手机号 * @param $mobile * @return bool */ private function ismobile($mobile) { if(preg_match(''/^1\d{10}$/'', $mobile)) return true; return false; } /** * 验证短信验证码 * @param $mobile * @param $vc * @return bool */ public function checkverifycode($mobile, $vc) { $vckey = ''vc_''.$mobile; $vcdata = json_decode(api_common::redis()->get($vckey), true); if($vcdata && $vcdata[''vc''] === $vc) { return true; } return false; } /** * 清除验证码 * @param $mobile */ public function cleanverifycode($mobile) { $redis = api_common::redis(); $vckey = ''vc_''.$mobile; $limitkey = ''vc_limit_''.$mobile; $redis->del($vckey); $redis->del($limitkey); }}
另付其他网友实现的短信验证码代码
$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; }} function postsms($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 $file http/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]); return implode(,$receive); }}?>
转载自:http://www.aspnetjia.com