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