常用Validate验证类
<?php class Validate { public static $MD5KEY='Fw8LK@A3aFDS#OM1qQC*GbY'; const TOKEN_EXPIRE=604800;//TOKEN过期时间(7天) /** * 生成邀请码 * @param int $uid * @return string */ public static function inviteCode($uid){ $code=base_convert($uid, 10, 16); $code=base_convert($code, 20, 36); $code=strtoupper(substr(md5($uid.self::$MD5KEY), 0,3).$code); return $code; } /** * 验证邀请码 * @param string $code * @return string|boolean */ public static function inviteUid($code){ $code=strtolower($code); $hash = substr($code, 0,3); $code = substr($code, 3); $uid=base_convert($code, 36, 20);//实际得到是UID的16进制 $uid=base_convert($uid, 16, 10); if (substr(md5($uid.self::$MD5KEY), 0,3)==$hash){ return $uid; } return 0; } public static function password($pwd){ $p = md5($pwd); return md5(substr($p, 16, 8).substr($p, 0, 8).substr($p, 24, 8).substr($p, 8, 8)); } /** * 检查用户token * @param int $uid * @param string $token * @return boolean */ public static function checkToken_1($uid,$token){ $res=false; for ($i=0;$i<7;$i++){//7天过期 $daytime = strtotime("-{$i} day"); //dump(date('Ymd',$daytime)); $t=self::token($uid,date('Ymd',$daytime)); if ($token===$t){ $res=true; break; } } return $res; } /** * 生成用户token * @param int $uid * @param string $day */ public static function token_1($uid,$day=''){ //$week=date('W');//7天过期 if (empty($day)){ $day = date('Ymd'); } $str=md5(self::$MD5KEY.$uid.$day); $str2=md5($str); $str3=array(); for ($i=0;$i<strlen($str);$i++){ $str3[]=$str[$i]; if ($i>0&&$uid%$i==0){ $str3[]=$str2[$i]; } } return implode('', $str3); } /** * 检查用户token * @param int $uid * @param string $token * @return boolean */ public static function checkToken($uid,$token){ if ($uid<1){ return false; } $dec_strarr = str_split($token,4); $parsenum=count($dec_strarr); if ($parsenum<10){ return false; } //dump($dec_strarr); $dec_timestr=''; $dec_sign=''; //==========解析时间========== for ($j=0;$j<$parsenum;$j++){ if ($j<10){ $pos=$uid%($j+1); if ($pos==0){ $dec_timestr.=substr($dec_strarr[$j], -1); $dec_sign.=substr($dec_strarr[$j], 0,3); }else{ $dec_timestr.=substr($dec_strarr[$j], 0,1); $dec_sign.=substr($dec_strarr[$j], -3); } }else{ $dec_sign.=$dec_strarr[$j]; } } //dump($dec_timestr); //dump($dec_sign); if (!is_numeric($dec_timestr)){ return false; } if (time()-$dec_timestr>self::TOKEN_EXPIRE){//七天有效期 return false; } $str=md5(self::$MD5KEY.$uid.$dec_timestr); $str2=md5($str); $strarr=array(); for ($i=0;$i<strlen($str);$i++){ $strarr[]=$str[$i]; if ($i>0&&$uid%$i==0){ $strarr[].=$str2[$i]; } } $sign=implode('', $strarr); return $dec_sign===$sign; } /** * 生成用户token * @param int $uid * @param string $day */ public static function token($uid){ $time=time(); $str=md5(self::$MD5KEY.$uid.$time); $str2=md5($str); $strarr=array(); for ($i=0;$i<strlen($str);$i++){ $strarr[]=$str[$i]; if ($i>0&&$uid%$i==0){ $strarr[].=$str2[$i]; } } $sign=implode('', $strarr); //==========插入时间========== $t1=str_split($sign,3); $timestr=strval($time); $uposarr=array(); for ($j=0;$j<10;$j++){ $pos=$uid%($j+1); if ($pos==0){ $t1[$j]=$t1[$j].$timestr[$j]; }else{ $t1[$j]=$timestr[$j].$t1[$j]; } } $token=implode('', $t1); return $token; } public static function checkUserName($userName = ''){ $res = array('code'=>0,'msg'=>''); if (empty($userName)) { $res['msg']='请输入用户名'; return $res; } if (preg_match ( '/^[-|;|,|\/|\(|\)|\[|\]|\}|\{|%|@|\*|!|\']$/', $userName )) { $res['msg']=''; return $res; return ResponseUtil::format(-3,'','用户名不能包含特殊字符'); } if (preg_match ( '/^[0-9]{1,}$/', $userName )) { $res['msg']='用户名不能全是数字!'; return $res; } if (preg_match ( '/^[0-9].*$/', $userName )) { $res['msg']='用户名第一个字符不能为数字!'; return $res; } if (preg_match ( '/^(open).*$/', $userName )) { $res['msg']='用户名不能使用open关键词!'; return $res; } /* if (preg_match ( "/[^a-zA-Z0-9\x{4e00}-\x{9fa5}]+/u", $userName )) { $res['msg']='请确保用户名由数字、字母组成,且第一位不能为数字!'; return $res; } */ if (preg_match ( "/[^a-zA-Z0-9_]+/u", $userName )) { $res['msg']='请确保用户名由数字、字母组成,且第一位不能为数字!'; return $res; } if (mb_strlen($userName,'utf-8') < 4 || mb_strlen($userName,'utf-8') > 20) { $res['msg']='用户名长度4-20个字符!'; return $res; } $res['code']=1; return $res; } public static function checkPassword($password,$minLen = 6,$maxLen = 16){ $match='/^[\\~!@#$%^&*()-_=+|{}\[\],.?\/:;\'\"\d\w]{'.$minLen.','.$maxLen.'}$/'; $v = trim($password); if(empty($v)){ return false; } return preg_match($match,$password); } /** * 检查密码强度 * @param string $pwd * @return number */ public static function pwdStrength($pwd){ $score=0; if (strlen($pwd)==0){ return $score; } $len=strlen($pwd); if (strtolower($pwd)!=$pwd){ $score++; } if (strtoupper($pwd)==$pwd){ $score++; } if (!is_numeric($pwd)){ $score++; } $special_chars=array(); preg_match_all("/[!@#\$%\*\(\)-_\+\=\\\|\]\}\{\[:;\/\?\.><,'\"]/", $pwd,$special_chars); if (count($special_chars[0])>0){ //echo '[sp1_'.count($special_chars[0]).']'; $score+=count($special_chars[0]); } $pwds=str_split($pwd); $pwd_chars=array_unique($pwds); if (count($pwd_chars)>1){ $score+=ceil(count($pwd_chars)/2); if ($len>=8){ $score++; } } $match_num=0; if (preg_match('/[0-9]+/',$pwd)){ $match_num+=1; } if (preg_match('/[a-z]+/',$pwd)){ $match_num+=1; } if (preg_match('/[A-Z]+/',$pwd)){ $match_num+=1; } if (preg_match('/[|!@#\$%\^&\*\(\)-_\+\/]+/',$pwd)){ $match_num+=2; } if ($match_num==2){ $score++; } if ($match_num>=3){ $score+=$match_num; } return $score; } public static function isEmail($mail){ return preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/',$mail); } public static function isMobile($value,$match='/^[(86)|0]?(13\d{9})|(15\d{9})|(17\d{9})|(18\d{9})$/'){ $v = trim($value); if(empty($v)){ return false; } return preg_match($match,$v); } /* * @des :验证IP * @param : $value string IP值 * @return : bool */ public static function checkIp($value = ''){ return (empty($value) ? false : (filter_var($value,FILTER_VALIDATE_IP))); } public static function isTrueName($trueName = ''){ return preg_match('/^[\x{4e00}-\x{9fa5}]{2,}$/u',$trueName); } /* * @des : 检测身份证 * @param : string $vStr 身份证 * @return : bool */ public static function isIdCard($vStr = ''){ if(empty($vStr)){ return false; } $vCity = array( '11','12','13','14','15','21','22', '23','31','32','33','34','35','36', '37','41','42','43','44','45','46', '50','51','52','53','54','61','62', '63','64','65','71','81','82','91' ); if (!preg_match('/^([\d]{17}[xX\d]|[\d]{15})$/', $vStr)) return false; if (!in_array(substr($vStr, 0, 2), $vCity)) return false; $vStr = preg_replace('/[xX]$/i', 'a', $vStr); $vLength = strlen($vStr); if ($vLength == 18) { $vBirthday = substr($vStr, 6, 4) . '-' . substr($vStr, 10, 2) . '-' . substr($vStr, 12, 2); } else { $vBirthday = '19' . substr($vStr, 6, 2) . '-' . substr($vStr, 8, 2) . '-' . substr($vStr, 10, 2); } if (date('Y-m-d', strtotime($vBirthday)) != $vBirthday) return false; if ($vLength == 18) { $vSum = 0; for ($i = 17 ; $i >= 0 ; $i--) { $vSubStr = substr($vStr, 17 - $i, 1); $vSum += (pow(2, $i) % 11) * (($vSubStr == 'a') ? 10 : intval($vSubStr , 11)); } if($vSum % 11 != 1) return false; } return true; } /** * [isQQ 是否为QQ] * @param [string] $subject [description] * @return boolean [description] */ public static function isQQ($subject) { return preg_match("/[1-9]([0-9]{5,11})/", $subject); } /** * [isLandline 是否为固定电话] * @param [type] $subject [description] * @return boolean [description] */ public static function isLandline($subject) { return preg_match("/[0-9-()()]{7,18}/", $subject); } }