",">",$txt);
$txt = preg_replace("/[\r\n]{1,}/is","
",$txt);
return $txt;
}
function delHtml($txt){
$txt = str_replace("
","",$txt);
$txt = str_replace("
","",$txt);
return $txt;
}
//把字符串转化为可以在JS数组里输出的字符串
function jsToHtml($mystr){
if(empty($mystr)){
return "";
}
$mystr = str_replace("\r\n","",$mystr);
$mystr = str_replace("'","\\'",$mystr);
return $mystr;
}
function cutstr($string, $length, $dot = ' ...',$charset='utf-8') {
/*
功能:按长度截取字符串
$string, $length, $dot,$charset
字符串,要取长度,截断符,编码
*/
if(strlen($string) <= $length) {
return $string;
}
$string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);
$strcut = '';
if(strtolower($charset) == 'utf-8') {
$n = $tn = $noc = 0;
while($n < strlen($string)) {
$t = ord($string[$n]);
if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
$tn = 1; $n++; $noc++;
} elseif(194 <= $t && $t <= 223) {
$tn = 2; $n += 2; $noc += 2;
} elseif(224 <= $t && $t <= 239) {
$tn = 3; $n += 3; $noc += 2;
} elseif(240 <= $t && $t <= 247) {
$tn = 4; $n += 4; $noc += 2;
} elseif(248 <= $t && $t <= 251) {
$tn = 5; $n += 5; $noc += 2;
} elseif($t == 252 || $t == 253) {
$tn = 6; $n += 6; $noc += 2;
} else {
$n++;
}
if($noc >= $length) {
break;
}
}
if($noc > $length) {
$n -= $tn;
}
$strcut = substr($string, 0, $n);
} else {
for($i = 0; $i < $length; $i++) {
$strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
}
}
$strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $strcut);
return $strcut.$dot;
}
function change_format($time,$time2,$myformat="d"){
/**
*功能:返回两个时间差
*参数:$time,$time2 时间1,时间2
*参数:$myformat 返回的时间差格式
*/
$sY = 31536000;//年
$sM = 2592000;//月(三十天计算)
$sW = 604800;//星期
$sD = 86400;//天
$sH = 3600;//小时
$sI = 60;//分钟
$sS = 1;//秒
$tmp_time = strtotime($time)-strtotime($time2);
switch($myformat){
case "y"://年
$tmp_time = $tmp_time/$sY;
break;
case "w"://星期
$tmp_time = $tmp_time/$sW;
break;
case "d"://天
$tmp_time = $tmp_time/$sD;
break;
case "h"://小时
$tmp_time = $tmp_time/$sH;
break;
case "i"://分钟
$tmp_time = $tmp_time/$sI;
break;
case "s"://秒
$tmp_time = $tmp_time;
break;
default://默认返回天
$tmp_time = $tmp_time/$sD;
break;
}
return $tmp_time;
}
//防RSS并进行转义
function get_param2($param_name,$convert='')
{
$param_value = "";
if(isset($_POST[$param_name])){
$param_value = trim($_POST[$param_name]);
}else if(isset($_GET[$param_name])){
$param_value = trim($_GET[$param_name]);
}
$param_value = RemoveXSS($param_value);
if(!get_magic_quotes_gpc()){//加上检查数据防sql注入
$param_value = sql_addslashes($param_value);
}
if ('int' == strtolower($convert)){
if (strlen($param_value)>10){
$param_value = preg_replace('/[^\d]/is','',$param_value);
}
else $param_value = intval($param_value);
}
return $param_value;
}
//不转义接收参数
function get_param3($param_name,$convert=''){
$param_value = "";
if(isset($_POST[$param_name])){
$param_value = $_POST[$param_name];
}else if(isset($_GET[$param_name])){
$param_value = $_GET[$param_name];
}
if(get_magic_quotes_gpc()){//如果打开发转义,则不能进行转义的,用户接收参数
$param_value = stripslashes($param_value);
}
if ('int' == strtolower($convert)){
if (strlen($param_value)>10){
$param_value = preg_replace('/[^\d]/is','',$param_value);
}
else $param_value = intval($param_value);
}
return $param_value;
}
//进行转义,但不进行RSS
function get_param($param_name,$convert='')
{
$param_value = "";
if(isset($_POST[$param_name])){
$param_value = trim($_POST[$param_name]);
}else if(isset($_GET[$param_name])){
$param_value = trim($_GET[$param_name]);
}
if(!get_magic_quotes_gpc()){//加上检查数据防sql注入
$param_value = sql_addslashes($param_value);
}
if ('int' == strtolower($convert)){
if (strlen($param_value)>10){
$param_value = preg_replace('/[^\d]/is','',$param_value);
}
else $param_value = intval($param_value);
}
return $param_value;
}
function sql_addslashes($value){
if (empty($value)){
return $value;
}else{
return is_array($value) ? array_map('sql_addslashes', $value) : addslashes($value);
}
}
/**
* @去除XSS(跨站脚本攻击)的函数
* @par $val 字符串参数,可能包含恶意的脚本代码如
* @return 处理后的字符串
* @Recoded By Androidyue
**/
function RemoveXSS($val) {
// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
// this prevents some character re-spacing such as
// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
$val = preg_replace('/([\x00-\x08\x0b-\x0c\x0e-\x19])/', '', $val);
// straight replacements, the user should never need these since they're normal characters
// this prevents like
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:?+/={}[]-_|\'\\';
for ($i = 0; $i < strlen($search); $i++) {
// ;? matches the ;, which is optional
// 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
// @ @ search for the hex values
$val = preg_replace('/([xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
// @ @ 0{0,7} matches '0' zero to seven times
$val = preg_replace('/({0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
}
// now the only remaining whitespace attacks are \t, \n, and \r
$ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
$ra = array_merge($ra1, $ra2);
$found = true; // keep replacing as long as the previous round replaced something
while ($found == true) {
$val_before = $val;
for ($i = 0; $i < sizeof($ra); $i++) {
$pattern = '/';
for ($j = 0; $j < strlen($ra[$i]); $j++) {
if ($j > 0) {
$pattern .= '(';
$pattern .= '([xX]0{0,8}([9ab]);)';
$pattern .= '|';
$pattern .= '|({0,8}([9|10|13]);)';
$pattern .= ')*';
}
$pattern .= $ra[$i][$j];
}
$pattern .= '/i';
$replacement = substr($ra[$i], 0, 2).''.substr($ra[$i], 2); // add in <> to nerf the tag
$val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
if ($val_before == $val) {
// no replacements were made, so exit the loop
$found = false;
}
}
}
return $val;
}
//返回随机密码
function cai_get_pwd($mylen=8){
//密码长度:$mylen
if(empty($mylen)){
$mylen = 8;
}
$array="2123456789";
$authnum = '';
for($i=0;$i<$mylen;$i++){
$authnum .=substr($array,mt_rand(0,9),1);
}
return $authnum;
}
//返回访问者的IP
function return_user_ip(){
$onlineip="127.0.0.1";
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$onlineip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$onlineip = $_SERVER['REMOTE_ADDR'];
}
$onlineip = explode(',', $onlineip);
return $onlineip[0];
}
//设置cookie
function isetcookie($var, $value, $life=0){
global $cookiedomain, $cookiepath,$_SERVER;
if(!empty($life)){
$life = time() + $life * 86400;
}
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
if($cookiedomain!=""){
setcookie($var, $value, $life,$cookiepath,$cookiedomain,$_SERVER['SERVER_PORT']==443?1:0);
}else{
setcookie($var, $value, $life,$cookiepath);
}
}
/**
*分页函数
*参数:$num,$perpage,$curr_page,$mpurl,
*说明:总数量,每页条数,当前页号,连接的URL
*
**/
//分页
function multi($num, $perpage, $curr_page, $mpurl) {
$multipage = '';
if($num > $perpage) {
$pages = ceil($num / $perpage);//求总页数
$multipage .= "首页 0?$curr_page:1)-1)."\">上一页 ";
$multipage .= "=$pages?$pages:$curr_page+1)."\">下一页 最后页";
}
return $multipage;
}
/**
*分页函数
*参数:$num,$perpage,$curr_page,$mpurl,
*说明:总数量,每页条数,当前页号,连接的URL
*
**/
//分页
function multitwo($num, $perpage, $curr_page, $mpurl, $pagenum=3){
$multipage = '';
if($num > $perpage) {
$pages = ceil($num / $perpage);//求总页数
$multipage .= "0?$curr_page:1)-1)."\">上一页 ";
//显示当前页前后5项
$startpage = $curr_page <= 5 ? 1 : $curr_page-$pagenum;
$endpage = $pages<=$curr_page+$pagenum ? $pages : $curr_page+$pagenum;
for($i = $startpage; $i <= $endpage; $i++){
if($i == $curr_page){
$multipage .= "[".$i."]";
}else{
$multipage .= "[".$i."]";
}
}
$multipage .= "=$pages?$pages:$curr_page+1)."\">下一页";
}
return $multipage;
}
//=========begin 操作数据库通用
/* *
* 检查相关记录是否存在
*
* $table 数据库表名
* $value 与$fields对应的值
* */
function exist_check($conn,$table,$value = array()){
$where = '';
foreach($value as $key=>$val){
if($key!=""){
$where .= " AND `".$key."`='".$val."' ";
}
}
$exist= "SELECT 1 FROM ".get_table($table)." WHERE 1 ".$where;
//die($exist);
$res = $conn->Query($exist);
if($conn->NumRows($res)>0){
return true;
}else{
return false;
}
}
/* *
* 在数据库表$table中增加一条记录
*
* $table 数据库表名
* $value 与$field对应的值
* */
function add_record($conn,$table,$value = array(),$show_bug=false){
$field_str = '';
$value_str = '';
foreach($value as $key=>$val) {
if($key!=""){
$field_str .= '`'.$key.'`,';
$value_str .= "'".$val."',";
}
}
$field_str = substr($field_str,0,-1);
$value_str = substr($value_str,0,-1);
$insert_sql = "INSERT INTO ".get_table($table)." ($field_str) VALUES($value_str);";
//echo $insert_sql;
$conn->Query($insert_sql);
$result = array();
$result['rows'] = $conn->AffectedRows();
$result['id'] = $conn->InsertID();
if($show_bug==true){
$result['error'] = $insert_sql;
}
return $result;
}
/* *
* 在数据库表$table中更新一条记录
*
* $table 数据库表名
* $value 与$field对应的值
* $where_ 条件字段与值
* */
function update_record($conn,$table,$value = array(),$where_value = array(),$where='')
{
$update_str = '';
foreach($value as $key=>$val)
{
if($key!=""){
if(strstr($val,$key.'+')!=false){
$update_str .= "`".$key."`=".$val.",";
}elseif(strstr($val,$key.'-')!=false){
$update_str .= "`".$key."`=".$val.",";
}else{
$update_str .= "`".$key."`='".$val."',";
}
}
}
if(empty($where))
{
foreach($where_value as $key=>$val)
{
if($key!=""){
$where .= " AND `".$key."`='".$val."' ";
}
}
}
$update_str = substr($update_str,0,-1);
$sql = "UPDATE ".get_table($table)." SET $update_str WHERE 1 $where;";
//echo $sql;exit;
$conn->Query($sql);
return $conn->AffectedRows();
}
/* *
* 在数据库表$table中删除(物理删除)或更新(逻辑删除)一条记录
*
* $table 数据库表名
* $where_ 条件字段与值
* $value 与$field对应的值
* */
function delete_record($conn,$table,$where_value = array(),$value = array())
{
$update_str = '';
$where = '';
foreach($where_value as $key=>$val)
{
if($key!=""){
$where .= " AND `".$key."`='".$val."' ";
}
}
if(count($value)>0)
{
foreach($value as $key=>$val)
{
if($key!=""){
$update_str .= "`".$key."`='".$val."',";
}
}
$update_str = substr($update_str,0,-1);
$sql = "UPDATE ".get_table($table)." SET $update_str WHERE 1 $where;";
}else{
$sql = "DELETE FROM ".get_table($table)." WHERE 1 $where;";
}
$conn->Query($sql);
return $conn->AffectedRows();
}
/**
* 获取数据库表$table中字段$info的信息
*
* $table 数据库表名
* $fields 条件字段名
* $value 字段($fields)对应值
* $info 返回信息字段名
* $all 是否返回所有记录
**/
function get_info($conn,$table,$info = array(),$where='',$OrderBy='',$all = false){
if(!empty($info)){
$str = implode(',',$info);
}else{
$str = '*';
}
if ($OrderBy != ""){
$where .= $OrderBy;
}
$sql= "SELECT $str FROM ".get_table($table)." WHERE 1 ".$where.' ';
$res = $conn->Query($sql);
//echo("sql:".$sql);
if($conn->NumRows($res)>0)
{
if(!$all)
{
$arr = $conn->FetchArray($res);
if( isset($arr['user_nickname']) ){
$arr['user_nickname'] = emoji_decode($arr['user_nickname']);
}
return $arr;
}else{
$all_record = array();
//$all_record[] = $arr;
while($arr = $conn->FetchArray($res))
{
if( isset($arr['user_nickname']) ){
$arr['user_nickname'] = emoji_decode($arr['user_nickname']);
}
$all_record[] = $arr;
}
return $all_record;
}
}else{
return array();
}
}
function get_table($myname,$db='',$inc=''){
if(empty($db)){
global $TABLE_NAME_INC,$MYSQL_DB;
return $MYSQL_DB.".`".$TABLE_NAME_INC.$myname."`";
}else{
return $db.".`".$inc.$myname."`";
}
}
//=========end 操作数据库通用
function www_setcookie($var, $value, $life = 0, $prefix = 1) {
global $cookiepre, $cookiedomain, $cookiepath, $timestamp, $_SERVER;
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie(($prefix ? $cookiepre : '').$var, $value,
$life ? $timestamp + $life : 0, $cookiepath,
$cookiedomain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0);
}
//==============================================
//==============begin 记录运行时间================
//返回毫秒的时间
function microtime_float(){
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
/**
* 页面完成时调用,记录页面执行时间
*
*/
function sys_log_shutdown_handler(){
// 1 开始与结束时间
$sys_log_end_time = microtime_float();
// 2 运行时间
$diff = number_format( $sys_log_end_time - $GLOBALS['SYS_START_TIME'], '4' );
// 3 写入到文件中
if( $diff > SYS_LOG_MAX_SECOND ){
sys_log_write_content( $diff );
}
}
/**
* 建立日志目录,递归建立
*
* @param str $param 路径名
*/
function sys_log_mkdir( $param ) {
if( !file_exists( $param ) ) {
sys_log_mkdir( dirname( $param ) );
@mkdir($param);
}
return true;
}
/**
* 保存日志
*/
function sys_log_write_content( $msg ,$path="sys_log",$f_name = ""){
// 1 每天一个日志文件
$logDir = WEBPATH_DIR.'cache'.DS.$path.DS;
sys_log_mkdir( $logDir );
if($f_name==''){
$logFile = $logDir.date('Y_m_d').'_log.txt';
}else{
$logFile = $logDir.$f_name."_".date('Y_m_d').'_log.txt';
}
// 2 日志内容: 时间-毫秒-开始(结束)-执行时间-当前链接
$content = date("Y-m-d H:i:s").' '.$msg;
$content .= ' '.(isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:"");
$content .= ' '.(isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:'直接输入');
$content .= "\r\n";
// 3 写入到指定文件中
@file_put_contents( $logFile, $content, FILE_APPEND );
return true;
}
//==============end 记录运行时间================
//============================================
//==================begin 模拟post发数据
/*
* $header='ContentType:application/x-www-form-urlencoded\r\n'
*/
function post_request($url,$param=null,$method='post',$header='')
{
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
// if($method=='post')
// {
$send_data = $param;
curl_setopt($ch, CURLOPT_POST, 1);
//添加变量
curl_setopt($ch, CURLOPT_POSTFIELDS, $send_data);
// }
if(!empty($header)){
curl_setopt($ch, CURLOPT_HEADER, $header);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//设置超时时间为1秒,超过1秒则关闭连接
curl_setopt($ch,CURLOPT_TIMEOUT,1);
$tmp_sources = curl_exec($ch);
curl_close($ch);
return $tmp_sources;
}
//==================end 模拟post发数据
//AJAX 返回数据
function return_ajax($return_arr,$type=true){
if($type){//如果是不要求汉写转编码的话
return json_encode($return_arr,JSON_UNESCAPED_UNICODE);
}else{
return json_encode($return_arr);
}
}
/*ajax分页函数*/
function getPage($sum ,$url,$curpage = 1,$perpage = 5,$numberpage = 5){
$totalpage=ceil($sum/$perpage);
$pevpage=$curpage-1;
$nextpage=$curpage+1;
if($curpage > 1){
$page['fri']= $pevpage;
$tol2 = $pevpage;
}else{
$page['fri']= '1';
$tol2 = 1;
}
if($curpage < $totalpage){
$page['two']= $nextpage;
$tol2 = $nextpage-1;
}else{
$page['two']= $totalpage;
$tol2 = $totalpage;
}
$page["tol"] .= $tol2.'/'.$totalpage;
return $page;
}
function https_request($url,$data = null){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
//模版发送微信消息
function send_tmpinfo( $openid , $data , $appid , $secret, $url, $tmplmsg){ //用户id 发送的数据 appid secretid
$token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
$json = https_request( $token_url );
$result = json_decode( $json );
$acc_token = $result -> access_token;
$send_url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$acc_token;
if($url){
$template_msg = array( 'touser' => $openid , 'template_id' => $tmplmsg , 'url'=>$url , 'topcolor' => '#000000' , 'data'=> $data );
}else{
$template_msg = array( 'touser' => $openid , 'template_id' => $tmplmsg , 'topcolor' => '#000000' , 'data'=> $data );
}
$template_data = urldecode( json_encode( $template_msg ) );
$temp_resutl = https_request( $send_url , $template_data );
$temp_data = json_decode($temp_resutl);
return $temp_data;
}
//判断是否微信进入
function is_weixin(){
if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) {
return true;
}
return false;
}
//去掉微信分享时URL里多出来的reuserid=XXX的值
function get_wx_back_url($state){
$my_recommend = '';
if(strstr($state,'reuserid')){
$tmp_state = explode('?',$state);
if(isset($tmp_state[1]) && $tmp_state[1]!=''){
$tmp_url_arr = explode('&',$tmp_state[1]);
foreach($tmp_url_arr as $val){
if($val!='' && strstr($val,'=')){
$tmp_val_arr = explode('=',$val);
if((isset($tmp_val_arr[0]) && $tmp_val_arr[0] == 'reuserid')
&& ( isset($tmp_val_arr[1]) && $tmp_val_arr[1]!='')){
$my_recommend = 'reuserid='.intval($tmp_val_arr[1]);
break;
}
}
}
}
}
if($my_recommend!=''){
$state = str_replace('&'.$my_recommend,'',$state);
$state = str_replace($my_recommend,'',$state);
}
return $state;
}
//获取推荐人id
function get_recommend($state){
if(strstr($state,'reuserid')){
$tmp_state = explode('?',$state);
if(isset($tmp_state[1]) && $tmp_state[1]!=''){
$tmp_url_arr = explode('&',$tmp_state[1]);
foreach($tmp_url_arr as $val){
if($val!='' && strstr($val,'=')){
$tmp_val_arr = explode('=',$val);
if((isset($tmp_val_arr[0]) && $tmp_val_arr[0] == 'reuserid')
&& ( isset($tmp_val_arr[1]) && $tmp_val_arr[1]!='')){
return $my_recommend = intval($tmp_val_arr[1]);
break;
}
}
}
}
}
return false;
}
//===================================================================
//=============begin 身份证
/**
* 判断身份证号码的正确性
*
* $cardnum 身份证号码
* $flag 2格式错误 3地区错误 4 校验码错误 5生日错误 6格式正确成年人 7格式正确未成年人
**/
function checkcardnum($cardnum){
$aCity = 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]{15}|[\d]{18}|[\d]{17}x)$/i',$cardnum)){
$flag = 2; //格式错误
return $flag;
}else{
//把15位的转化成18位
if(strlen($cardnum)==15){
$cardnum = idcard_15to18($cardnum);
}
//验证地区
if(!array_key_exists(substr($cardnum,0,2),$aCity)){
$flag = 3; //地区错误
return $flag;
}
//校验码有效性检查
if (idcard_verify_number($cardnum) != strtoupper(substr($cardnum, 17, 1))){
$flag = 4; //校验码错误
return $flag;
}
//验证生日 18岁以下未成年人
if(!checkdate(substr($cardnum,10,2),substr($cardnum,12,2),substr($cardnum,6,4))){
$flag = 5; //生日错误
return $flag;
}
//判断是否是成年人
if(checkadult($cardnum)){
$flag = 6;//格式正确成年人
return $flag;
}else{
$flag = 7;//格式正确未成年人
return $flag;
}
}
}
/***************
* 简单判断用户是否是成年人
*
* $cardnum 身份证号码(必须保证是18位的,15位的要先转换成18位)
* $flag 返回值 1成年人 0未成年人
****************/
function checkadult($cardnum){
$tyear=intval(substr($cardnum,6,4));
$tmonth=intval(substr($cardnum,10,2));
$tday=intval(substr($cardnum,12,2));
$yeardiff = intval(date("Y",THIS_DATETIME))-$tyear;
if($yeardiff == 18){//年满18
$monthdiff = intval(date("m",THIS_DATETIME))-$tmonth;
if($monthdiff > 0){//月份已满18
return 1;
}else if($monthdiff == 0){//如果月份刚好满18岁
$daydiff = intval(date("d",THIS_DATETIME))-$tday;
if($daydiff > -1){//日已满18
return 1;
}else{//日未满18
return 0;
}
}else{//月份未满18
return 0;
}
}else if($yeardiff > 18){//大于18
return 1;
}else{//未满18
return 0;
}
}
// 计算身份证校验码,根据国家标准GB 11643-1999
function idcard_verify_number($idcard_base){
//加权因子
$factor=array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);
//校验码对应值
$verify_number_list=array('1','0','X','9','8','7','6','5','4','3','2');
$checksum=0;
for($i=0;$i0,'m_birthmonth'=>0,'m_birthday'=>0);
if(checkcardnum($cardnum) != 6 && checkcardnum($cardnum) != 7){
return $year_month_day;
}else{
if(strlen($cardnum)==15){
$cardnum = idcard_15to18($cardnum);//15位转18位身份证号码
}
$year_month_day['m_birthyear'] = intval(substr($cardnum,6,4));
$year_month_day['m_birthmonth'] = intval(substr($cardnum,10,2));
$year_month_day['m_birthday'] = intval(substr($cardnum,12,2));
return $year_month_day;
}
}
//=============end 身份证
//===================================================================
//把用户输入的文本转义(主要针对特殊符号和emoji表情)
function emoji_encode($str){
if(empty($str)){
return $str;
}
$str = preg_replace_callback('/[\xf0-\xf7].{3}/', function($r) { return '@E' . base64_encode($r[0]);}, $str);
return $str;
}
//解码(主要针对特殊符号和emoji表情)
function emoji_decode($str){
if(empty($str)){
return $str;
}
$str = preg_replace_callback('/@E(.{6}==)/', function ($r) {
return base64_decode($r[1]);
}, $str);
return $str;
}
//二维数组按某个key进行排序
/*
* $arrays 要排序的二维数组
* $sort_key 二维数组中需要排序的key
* $orderby 排序方式(SORT_ASC ->按升序排列。(A-Z);SORT_DESC ->按降序排列。(Z-A))
* $datatype 需要排序的数据类型(SORT_NUMERIC ->将每一项按数字顺序排列;SORT_REGULAR ->将每一项按常规顺序排列。;SORT_STRING ->将每一项按字母顺序排列)
$person = array(
array('id'=>1,'name'=>'fdsfd','weight'=>100,'height'=>180),
array('id'=>2,'name'=>'erwrds','weight'=>53,'height'=>150),
array('id'=>3,'name'=>'jerry','weight'=>53,'height'=>156),
array('id'=>4,'name'=>'fdsafdf','weight'=>53,'height'=>151),
array('id'=>5,'name'=>'fdsatyu','weight'=>80,'height'=>200),
array('id'=>6,'name'=>'uyt6576','weight'=>95,'height'=>110),
array('id'=>7,'name'=>'gfdkljo','weight'=>70,'height'=>170)
);
$person = get_arrar_sort($person,'weight',SORT_DESC);
$person = get_arrar_sort($person,'height',SORT_DESC);
var_dump($person);
echo('
');
*/
function get_arrar_sort($arrays,$sort_key,$orderby=SORT_ASC,$datatype=SORT_NUMERIC){
if(is_array($arrays)){
//把数组中要排序的key拿出来变为顺序的一个数级先
$key_arrays = array();
foreach ($arrays as $array){
if(!isset($array[$sort_key])){
return $arrays;
}
if(is_array($array)){
$key_arrays[] = $array[$sort_key];
}else{
return false;
}
}
}else{
return false;
}
//按指得的key进行排序
array_multisort($key_arrays,$orderby,$datatype,$arrays);
return $arrays;
}
//生成验证码功能
function get_code_img($myname='check_code'){
//生成验证码图片
Header("Content-type: image/PNG");
srand((double)microtime()*1000000);//播下一个生成随机数字的种子,以方便下面随机数生成的使用
//将随机数存入session中
$_SESSION['check_code']="";
$im = imagecreate(50,22); //制定图片背景大小
$black = ImageColorAllocate($im, 0,0,0); //设定三种颜色
$white = ImageColorAllocate($im, 255,255,255);
$gray = ImageColorAllocate($im, 255,255,255);
imagefill($im,0,0,$gray); //采用区域填充法,设定(0,0)
$authnum=rand(1000,9999);
//将四位整数验证码绘入图片
$_SESSION[$myname]=$authnum;
imagestring($im, 5, 10, 3, $authnum, $black);
// 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 座标处(图像的左上角为 0, 0)。
//如果 font 是 1,2,3,4 或 5,则使用内置字体
for($i=0;$i<200;$i++) //加入干扰象素
{
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
}
ImagePNG($im);
ImageDestroy($im);
}
//判断客户端的操作系统
function check_tel_sys($str){
if(strripos($str,"Android")!==false){//如果是安桌手机
return 1;
}else if(strripos($str,"ios")!==false){//如果是苹果手机
return 2;
}else{//如果是其它手机
return 3;
}
}