* @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; } }