| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500 | <?php/** * StrUtils.php UTF-8 * * * @date    : 2018/4/23 10:41 * * @license 这不是一个自由软件,未经授权不许任何使用和传播。 * @author  : wuyonghong <wyh@huosdk.com> * @version : HUOSDK 8.0 */namespace huolib\tool;use huolib\constant\WalletConst;class StrUtils {    /**     * 去除所有空格     *     * @param $str     *     * @return mixed     */    public static function trimAll($str) {        $_rule = array(" ", " ", "\t", "\n", "\r");        $_replace = array("", "", "", "", "");        return str_replace($_rule, $_replace, $str);    }    /**     * 校验是否为合法手机号     *     * @param $phone     *     * @return false|int     */    public static function checkPhone($phone) {        $_pattern = "/^1[23456789]\d{9}$/";        return preg_match($_pattern, $phone);    }    /**     * 校验是否为合法Email     *     * @param $email     *     * @return false|int     */    public static function checkEmail($email) {        $_pattern = "/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";        return preg_match($_pattern, $email);    }    /**     * 校验是否是合法的英文与数字     *     * @param string $str     *     * @return false|int     */    public static function checkEnStrAndNum($str) {        $_pattern = "/^[a-zA-Z0-9]+$/i";        return preg_match($_pattern, $str);    }    /**     * 校验是否是合法的可打印字符     *     * @param string $str     *     * @return false|int     */    public static function checkPrintStr($str) {        $_pattern = "/^[A-Za-z0-9`~!@#$%^&*()_\-+=<>?:\"{}|,.\/;'\\[\]]+$/i";        return preg_match($_pattern, $str);    }    /**     * 手机中间四位加密     *     * @param string $phone     * @param int    $start     * @param int    $length     *     * @return null|string     */    public static function encryptPhone($phone = '', $start = 3, $length = 4) {        if (empty($phone)) {            return '';        }        if (false == self::checkPhone($phone)) {            return false;        }        $replacement = str_pad('', $length, '*');        return substr_replace($phone, $replacement, $start, $length);        //return preg_replace('/(^.*)\d{4}(\d{4})$/', '\\1****\\2', $phone);    }    /**     * 身份证号加密     *     * @param string $id_card 证件号     * @param int    $start   开始长度     * @param int    $end     结尾长度     *     * @return null|string     */    public static function encryptIdCard($id_card = '', $start = 3, $end = 2) {        if (empty($id_card)) {            return '';        }        $_length = strlen($id_card);        $length = $_length - $end - $start;        $replacement = str_pad('', $length, '*');        return substr_replace($id_card, $replacement, $start, $length);    }    /**     * 名字加密     *     * @param string $name 名字     *     * @return mixed     */    public static function encryptName($name) {        if (empty($name)) {            return '';        }        $encrypt_name = '';        //判断是否包含中文字符        if (preg_match("/[\x{4e00}-\x{9fa5}]+/u", $name)) {            //按照中文字符计算长度            $len = mb_strlen($name, 'UTF-8');            //echo '中文';            if ($len >= 3) {                //三个字符或三个字符以上掐头取尾,中间用*代替                $encrypt_name = mb_substr($name, 0, 1, 'UTF-8').str_repeat('*', $len - 2).mb_substr(                        $name, -1, 1, 'UTF-8'                    );            } elseif ($len === 2) {                //两个字符                $encrypt_name = mb_substr($name, 0, 1, 'UTF-8').'*';            }        } else {            //按照英文字串计算长度            $len = strlen($name);            //echo 'English';            if ($len >= 3) {                //三个字符或三个字符以上掐头取尾,中间用*代替                $encrypt_name = substr($name, 0, 1).str_repeat('*', $len - 2).substr($name, -1);            } elseif ($len === 2) {                //两个字符                $encrypt_name = substr($name, 0, 1).'*';            }        }        return $encrypt_name;    }    /**     * 邮箱加密     *     * @param string $email     *     * @return bool|string     */    public static function encryptEmail($email = '') {        if (false == self::checkEmail($email)) {            return false;        }        $_str = $email;        $_email_array = explode("@", $_str);        $_prev_fix = (strlen($_email_array[0]) < 4) ? "" : substr($_str, 0, 3); //邮箱前缀        $_count = 0;        $_str = preg_replace('/([\d\w+_-]{0,100})@/', '***@', $_str, -1, $_count);        return $_prev_fix.$_str;    }    /**     * 解析字符串     *     * @param string $str     *     * @return array     */    public static function parseStr($str = '') {        $_str_arr = explode('&', $str);        $_data_arr = array();        foreach ($_str_arr as $_key => $_val) {            $_pair = explode('=', $_val, 2);            $_data_arr[$_pair[0]] = $_pair[1];        }        return $_data_arr;    }    /**     * 获取随机字符串     *     * @param $length     *     * @return null|string     */    public static function getRandChars($length) {        $str = null;        $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";        $max = strlen($strPol) - 1;        for ($i = 0; $i < $length; $i++) {            $str .= $strPol[rand(0, $max)];//rand($min,$max)生成介于min和max两个数之间的一个随机整数        }        return $str;    }    /**     * 创建链接字符串     *     * @param array $para     *     * @return bool|string     */    public static function createLinkString(array $para) {        $_arg = "";        while (list($_key, $_val) = self::funcNewEach($para)) {            $_arg .= $_key."=".urlencode($_val)."&";        }        // 去掉最后一个&字符        $_arg = substr($_arg, 0, strlen($_arg) - 1);        // 如果存在转义字符,那么去掉转义        if (get_magic_quotes_gpc()) {            $_arg = stripslashes($_arg);        }        return $_arg;    }    public static function funcNewEach(&$array) {        $_res = array();        $_key = key($array);        if ($_key !== null) {            next($array);            $res[1] = $_res['value'] = $array[$_key];            $res[0] = $_res['key'] = $_key;        } else {            $res = false;        }        return $res;    }    //生成订单号    /**     * 生成订单号     *     * @param int    $login_ch     * @param int    $pay_ch     * @param int    $mem_id     *     * @param string $ext     *     * @return string     */    public static function genOrderId(        $login_ch = 0, $pay_ch = 0, $mem_id = 0, $ext = WalletConst::WALLET_ORDER_PREFIX_SDK    ) {        list($_u_sec, $_sec) = explode(" ", microtime());        // 取微秒前3位+再两位随机数+玩家ID后四位+渠道ID后四位        $_order_id = $ext.$_sec.                     substr($_u_sec, 2, 3).                     sprintf("%02d", $login_ch % 100).                     sprintf("%02d", $pay_ch % 100).                     sprintf("%02d", $mem_id % 100);        return $_order_id;    }    /**     *     * @param $str     *     * @return string     */    public static function genToken($str = '') {        $time = time();        $pay_token = md5(md5(uniqid($str)).$time);        return $pay_token;    }    /**     * 参数排序     *     * @param array $para     *     * @return array     */    public static function argSort(array $para) {        ksort($para);        reset($para);        return $para;    }    public static function sAddAlashes($string) {        if (is_array($string)) {            foreach ($string as $_key => $_val) {                $string[$_key] = self::sAddAlashes($_val);            }        } else {            $string = addslashes(trim($string));        }        return $string;    }    /**     * 安全过滤     *     * @param $string     *     * @return array|string     */    public static function safeFilter($string) {        $_magic_quote = get_magic_quotes_gpc();        if (empty($_magic_quote)) {            $string = self::sAddAlashes($string);        }        if (is_array($string)) {            foreach ($string as $key => $val) {                $string[$key] = self::sAddAlashes($val);            }        } else {            $string = htmlspecialchars(trim($string));        }        return $string;    }    /**     * 字符串转数组     *     * @param $string     *     * @return array     */    public static function strToArr($string) {        return is_string($string) ? explode(',', $string) : $string;    }    /**     * 数组转化为字符串     *     * @access public     *     * @param array $arr 数组     *     * @return string     */    public static function arrToStr($arr) {        return is_array($arr) ? implode(',', $arr) : '';    }    /**     * 获取正确的URL     *     * @param $url     *     * @return string     */    public static function getUrl($url) {        //检查链接中是否存在 ?        $_check = strpos($url, '?');        //如果存在 ?        if (false !== $_check) {            if (substr($url, $_check + 1) == '') {                //可以直接加上附加参数                $_new_url = $url;            } else {                //如果有参数,如:http://www.yitu.org/index.php?ID=12                $_new_url = $url.'&';            }        } else {//如果不存在 ?            $_new_url = $url.'?';        }        return $_new_url;    }    /**     * 格式化数字     *     * @param float $num     *     * @param int   $decimals 小数点后几位     *     * @return float     */    public static function formatNumber($num = 0.00, $decimals = 2) {        return floatval(number_format($num, $decimals, '.', ''));    }    /**     * 比较两个数字     *     * @param $num1     * @param $num2     *     * @return int     */    public static function compareNumber($num1, $num2) {        $_num1 = self::formatNumber($num1, 4);        $_num2 = self::formatNumber($num2, 4);        if ($_num1 == $_num2) {            return 0;        } elseif ($_num1 < $_num2) {            return -1;        } else {            return 1;        }    }    /**     * ARPU(Average Revenue Per User) :平均每用户收入,即可通过 总收入/活跃用户 计算得出。     *     * @param float $sum_money     * @param int   $user_cnt     *     * @return string     */    public static function getArpu($sum_money, $user_cnt) {        $sum_money = (float)$sum_money;        $user_cnt = (float)$user_cnt;        if (!is_numeric($sum_money) || !is_numeric($user_cnt)) {            return '0';        }        if (empty($user_cnt)) {            return '0';        }        $_arppu = $sum_money / $user_cnt;        return StrUtils::formatNumber($_arppu);    }    /**     *     * @param int $cnt1     * @param int $cnt2     *     * @return string     */    public static function getRate($cnt1, $cnt2) {        if (!is_numeric($cnt1)) {            return '0%';        }        if (empty($cnt2) || $cnt2 == '0.00') {            return '0%';        }        $_rate = 100 * $cnt1 / $cnt2;        return StrUtils::formatNumber($_rate).'%';    }    public static function isJson($str) {        json_decode($str);        return (json_last_error() == JSON_ERROR_NONE);    }    /**     * 根据当前url获取路由     *     * @param string $url 地址     *     * @return:string     */    public static function getRoute($url) {        $_url_info = parse_url($url);        /*url存在scheme则只获取链接路径*/        if (isset($_url_info['scheme']) && isset($_url_info['path'])) {            $_url = $_url_info['path'];        } else {            $_url = $url;        }        /*处理链接参数*/        $_route_arr = array_slice(explode('/', $_url), 0, 4);        $_route = implode('/', $_route_arr);        return $_route;    }}
 |