we_regexs

/**
* 常用正则验证
* @param string $type
* @return array
*/
function we_regexs($type)
{
    $regexs = [
        'mobile'=>"/^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|191|(147))\d{8}$/",
        'wechat'=>"/[a-zA-Z]([a-zA-Z0-9_-]{5,19})/",
        'qq'=>"/[1-9]([0-9]{5,11})/",
    ];
    
    return isset($regexs[$type])?isset($regexs[$type]):'';
}

route_class

/**
 * 将当前请求的路由名称转换为 CSS 类名称,
 * @return string  返回路由名
 */
function route_class()
{
    return str_replace('.', '-', Route::currentRouteName());
}

get_byte

/**
* 格式化字节大小
* @param  number $size      字节数
* @param  string $delimiter 数字和单位分隔符
* @return string            格式化后的带单位的大小
 */
function get_byte($size, $delimiter = '')
{
    $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
    for ($i = 0; $size >= 1024 && $i < 5; $i++) {
        $size /= 1024;
    }
    return round($size, 2) . $delimiter . $units[$i];
}

we_json

/**
* 将字符串转数组
* @param  string $string      字符串
* @return array               如果是json则返回数组,否则返回其本身
 */
function we_json($string)
{
    $de_string = json_decode($string, true);
    if (json_last_error() == JSON_ERROR_NONE) {
        return $de_string;
    } else {
        return $string;
    }
}

get_random

/**
 * 产生随机字符串
 *
 * @param    int        $length  输出长度
 * @param    string     $chars   可选的 ,默认为 abcdefghijklmnopqrstuvwxyz0123456789
 * @return   string     字符串
 */
function get_random($length, $chars = 'abcdefghijklmnopqrstuvwxyz0123456789')
{
    $hash = '';
    $max = strlen($chars) - 1;
    for ($i = 0; $i < $length; $i++) {
        $hash .= $chars[mt_rand(0, $max)];
    }
    return $hash;
}

msec_time

/**
 * 获取当前毫秒级时间戳
 * @return   string     字符串
 */

function msec_time()
{
    list($msec, $sec) = explode(' ', microtime());
    $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    return $msectime;
}

num_to_rmb

/**
 * 将数字转大写人民币金额
 *
 * @param    float      $num  金额值
 * @return   string     字符串
 */
function num_to_rmb($num)
{
    $c1 = "零壹贰叁肆伍陆柒捌玖";
    $c2 = "分角元拾佰仟万拾佰仟亿";
    //精确到分后面就不要了,所以只留两个小数位
    $num = round($num, 2);
    //将数字转化为整数
    $num = $num * 100;
    if (strlen($num) > 10) {
        return "金额太大,请检查";
    }
    $i = 0;
    $c = "";
    while (1) {
        if ($i == 0) {
            //获取最后一位数字
            $n = substr($num, strlen($num)-1, 1);
        } else {
            $n = $num % 10;
        }
        //每次将最后一位数字转化为中文
        $p1 = substr($c1, 3 * $n, 3);
        $p2 = substr($c2, 3 * $i, 3);
        if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) {
            $c = $p1 . $p2 . $c;
        } else {
            $c = $p1 . $c;
        }
        $i = $i + 1;
        //去掉数字最后一位了
        $num = $num / 10;
        $num = (int)$num;
        //结束循环
        if ($num == 0) {
            break;
        }
    }
    $j = 0;
    $slen = strlen($c);
    while ($j < $slen) {
        //utf8一个汉字相当3个字符
        $m = substr($c, $j, 6);
        //处理数字中很多0的情况,每次循环去掉一个汉字“零”
        if ($m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零') {
            $left = substr($c, 0, $j);
            $right = substr($c, $j + 3);
            $c = $left . $right;
            $j = $j-3;
            $slen = $slen-3;
        }
        $j = $j + 3;
    }
    //这个是为了去掉类似23.0中最后一个“零”字
    if (substr($c, strlen($c)-3, 3) == '零') {
        $c = substr($c, 0, strlen($c)-3);
    }
    //将处理的汉字加上“整”
    if (empty($c)) {
        return "零元整";
    } else {
        return $c . "整";
    }
}

cut


/**
 * [字符串截取]
 * @param  [type]  $Str    [字符串]
 * @param  [type]  $Length [长度]
 * @param  boolean $more   [模型]
 * @return [type]          [截取后的字符串]
 */
function cut($Str, $Length, $more=true)
{//$Str为截取字符串,$Length为需要截取的长度

    global $s;
    $i = 0;
    $l = 0;
    $ll = strlen($Str);
    $s = $Str;
    $f = true;

    while ($i <= $ll) {
        if (ord($Str{$i}) < 0x80) {
            $l++;
            $i++;
        } elseif (ord($Str{$i}) < 0xe0) {
            $l++;
            $i += 2;
        } elseif (ord($Str{$i}) < 0xf0) {
            $l += 2;
            $i += 3;
        } elseif (ord($Str{$i}) < 0xf8) {
            $l += 1;
            $i += 4;
        } elseif (ord($Str{$i}) < 0xfc) {
            $l += 1;
            $i += 5;
        } elseif (ord($Str{$i}) < 0xfe) {
            $l += 1;
            $i += 6;
        }

        if (($l >= $Length - 1) && $f) {
            $s = substr($Str, 0, $i);
            $f = false;
        }

        if (($l > $Length) && ($i < $ll) && $more) {
            $s = $s . '...';
            break; //如果进行了截取,字符串末尾加省略符号“...”
        }
    }
    return $s;
}

hide_right


/**
 * 将字符串的后几位替换成指定字符
 * @param string $string 要替换的字符串
 * @param number $num 右侧隐藏的长度
 * @param string $to 替换成什么?
 *
 */

function hide_right($string, $num, $to='*')
{
    if (strlen($string)>$num) {
        return  substr($string, 0, strlen($string)-$num).str_repeat($to, $num);
    } else {
        return str_repeat($to, $num);
    }
}

hide_mid

/**
 * 将字符串的中间几位替换成指定字符
 * @param string $string 要替换的字符串
 * @param number $left=3 左边保留的长度
 * @param number $right 右边保留的长度
 * @param string $to 替换成什么?
 * @param number $re 隐藏内容重复次数
 *
 */
function hide_mid($string, $left=3, $right=4, $to='*', $re = 3)
{
    $tLen = strlen($string);
    $sLen = $left+$right;
    if ($tLen > $sLen) {
        return  substr($string, 0, $left).str_repeat($to, $re).substr($string, -$right);
    } else {
        return str_repeat($to, $re);
    }
}

str_mid_cut

/**
 * 截取两个指定字符之间的字符串
 * @param string $begin  起始字符
 * @param string $end  截止字符
 * @param string $str  要截取的字符串
 * @return
 *
 */

function str_mid_cut($begin, $end, $str)
{
    $b = mb_strpos($str, $begin) + mb_strlen($begin);
    $e = mb_strpos($str, $end) - $b;
 
    return mb_substr($str, $b, $e);
}

zh_week

/**
 * 将字符串的中间几位替换成指定字符
 * @param string $date 日期
 * @param number $type 返回星期的格式[1,2,3]
 *
 */

function zh_week($date, $type=1)
{
    //先定义星期的汉字
    $weekarray=array("日","一","二","三","四","五","六");
    //获取当前的星期数字
    $str = $date?date('Y-m-d', strtotime($date)):date('Y-m-d', time());
    $weeknum = date("w", strtotime($str));
    switch ($type) {
        case 1:
            $prefix = '';
            break;
        case 2:
            $prefix = '周';
            break;
        case 3:
            $prefix = '星期';
            break;
        default:
            $prefix = '';
    }
    return $prefix.$weekarray[$weeknum];
}

curl_request

/**
 * curl请求
 * @param string $url 请求url
 * @param array  $post post请求数据
 * @param array  $cookie 提交的cookies
 * @param boolean $returnCookie
 *
 */
function curl_request($url, $post='', $cookie='', $returnCookie=0)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)');
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
    curl_setopt($curl, CURLOPT_REFERER, $url);
    if ($post) {
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
    }
    if ($cookie) {
        curl_setopt($curl, CURLOPT_COOKIE, $cookie);
    }
    curl_setopt($curl, CURLOPT_HEADER, $returnCookie);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($curl);
    if (curl_errno($curl)) {
        return curl_error($curl);
    }
    curl_close($curl);
    if ($returnCookie) {
        list($header, $body) = explode("\r\n\r\n", $data, 2);
        preg_match_all("/Set\-Cookie:([^;]*);/", $header, $matches);
        $info['cookie']  = substr($matches[1][0], 1);
        $info['content'] = $body;
        return $info;
    } else {
        return $data;
    }
}

url_param

/**
 * 获取url字符串中的参数
 * @param string $url
 * @return array
 */
function url_param($url)
{
    $result = array();
    $mr     = preg_match_all('/(\?|&)(.+?)=([^&?]*)/i', $url, $matchs);
    if ($mr !== false) {
        for ($i = 0; $i < $mr; $i++) {
            $result[$matchs[2][$i]] = $matchs[3][$i];
        }
    }
    return $result;
}

strip_tags_eol

/**
 * 去除html标签、换行符、空格
 * @param string $input
 * @return string
 */

function strip_tags_eol($input)
{
    return trim(str_replace(array(PHP_EOL, "&nbsp;"), "", strip_tags($input)));
}

str_array


/**
 * 将一个字符串转换成数组,支持中文
 * @param string    $string   待转换成数组的字符串
 * @return string   转换后的数组
 */
function str_array($string)
{
    $strlen = mb_strlen($string);
    while ($strlen) {
        $array[] = mb_substr($string, 0, 1, "utf8");
        $string = mb_substr($string, 1, $strlen, "utf8");
        $strlen = mb_strlen($string);
    }
    return $array;
}

list_to_tree

/**
 * 把返回的数据集转换成Tree
 * @param array $list 要转换的数据集
 * @param string $pid parent标记字段
 * @param string $level level标记字段
 * @return array
 */
function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0)
{
    // 创建Tree
    $tree = array();

    if (is_array($list)) {

        // 创建基于主键的数组引用
        $refer = array();
        foreach ($list as $key => $val) {
            $refer[$val[$pk]] =& $list[$key];
        }

        foreach ($list as $key => $val) {
            // 判断是否存在parent
            $parentId =  $val[$pid];
            if ($root == $parentId) {
                $tree[] =& $list[$key];
            } else {
                if (isset($refer[$parentId])) {
                    $parent =& $refer[$parentId];
                    $parent[$child][] =& $list[$key];
                }
            }
        }
    }
    return $tree;
}

tree_to_list

/**
 * 将list_to_tree的树还原成列表
 * @param  array $tree  原来的树
 * @param  string $child 子节点的键
 * @param  string $order 排序显示的键,一般是主键 升序排列
 * @param  array  $list  过渡用的中间数组,
 * @return array        返回排过序的列表数组
 */
function tree_to_list($tree, $child = '_child', $order='id', &$list = array())
{
    if (is_array($tree)) {
        $refer = array();
        foreach ($tree as $key => $value) {
            $reffer = $value;
            if (isset($reffer[$child])) {
                unset($reffer[$child]);
                tree_to_list($value[$child], $child, $order, $list);
            }
            $list[] = $reffer;
        }
        $list = list_sort_by($list, $order, $sortby='asc');
    }
    return $list;
}

list_sort_by

/**
* 对查询结果集进行排序
* @access public
* @param array $list 查询结果
* @param string $field 排序的字段名
* @param array $sortby 排序类型
* asc正向排序 desc逆向排序 nat自然排序
* @return array
*/
function list_sort_by($list, $field, $sortby='asc')
{
    if (is_array($list)) {
        $refer = $resultSet = array();
        foreach ($list as $i => $data) {
            $refer[$i] = &$data[$field];
        }
        switch ($sortby) {
           case 'asc': // 正向排序
                asort($refer);
                break;
           case 'desc':// 逆向排序
                arsort($refer);
                break;
           case 'nat': // 自然排序
                natcasesort($refer);
                break;
       }
        foreach ($refer as $key=> $val) {
            $resultSet[] = &$list[$key];
        }
        return $resultSet;
    }
    return false;
}

is_contact


/**
 * 验证联系方式是否合法
 * @param string $input
 * @param string $type
 * @return boolean
 */
function is_contact($input, $type)
{
    $regex = we_regexs($type);
    if (!$regex) {
        return false;
    }
    //验证长度
    if ($type=='mobile') {
        $len = (strlen($input)==11);
    } else {
        $len = (strlen($input)>5);
    }
    return $input!=null && $len && preg_match($regex, $input);
}

validate_idcard

/**
 * 验证身份证是否合法
 * @param string $IDCard
 * @return boolean
 */
function validate_idcard($IDCard)
{
    if (strlen($IDCard) == 18) {
        return check18IDCard($IDCard);
    } elseif ((strlen($IDCard) == 15)) {
        $IDCard = convertIDCard15to18($IDCard);
        return check18IDCard($IDCard);
    } else {
        return false;
    }
}

//计算身份证的最后一位验证码,根据国家标准GB 11643-1999
function calcIDCardCode($IDCardBody)
{
    if (strlen($IDCardBody) != 17) {
        return false;
    }

    //加权因子
    $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    //校验码对应值
    $code = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
    $checksum = 0;

    for ($i = 0; $i < strlen($IDCardBody); $i++) {
        $checksum += substr($IDCardBody, $i, 1) * $factor[$i];
    }

    return $code[$checksum % 11];
}

// 将15位身份证升级到18位
function convertIDCard15to18($IDCard)
{
    if (strlen($IDCard) != 15) {
        return false;
    } else {
        // 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
        if (array_search(substr($IDCard, 12, 3), array('996', '997', '998', '999')) !== false) {
            $IDCard = substr($IDCard, 0, 6) . '18' . substr($IDCard, 6, 9);
        } else {
            $IDCard = substr($IDCard, 0, 6) . '19' . substr($IDCard, 6, 9);
        }
    }
    $IDCard = $IDCard . calcIDCardCode($IDCard);
    return $IDCard;
}

// 18位身份证校验码有效性检查
function check18IDCard($IDCard)
{
    if (strlen($IDCard) != 18) {
        return false;
    }

    $IDCardBody = substr($IDCard, 0, 17); //身份证主体
    $IDCardCode = strtoupper(substr($IDCard, 17, 1)); //身份证最后一位的验证码

    if (calcIDCardCode($IDCardBody) != $IDCardCode) {
        return false;
    } else {
        return true;
    }
}
Last modification:September 26th, 2019 at 06:34 pm