目录
生成UUID 单机使用
/**
* 生成UUID 单机使用
* @return string
*/
function uuid()
{
$charId = md5(uniqid(strval(mt_rand()), true));
$hyphen = chr(45);
$uuid = chr(123)
. substr($charId, 0, 8) . $hyphen
. substr($charId, 8, 4) . $hyphen
. substr($charId, 12, 4) . $hyphen
. substr($charId, 16, 4) . $hyphen
. substr($charId, 20, 12)
. chr(125);
return $uuid;
}
生成随机字符串
/**
* 生成随机字符串
* 默认长度6位 字母和数字混合
* @param integer $len 长度
* @param int $type 字串类型:0 大小写字母混合 1 数字 2 大写字母 3 小写字母 4 混合
* @param string $addChars 额外字符
* @return string
*/
function randString(int $len = 6, int $type = 0, string $addChars = '')
{
$str = '';
switch ($type) {
case 0:
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' . $addChars;
break;
case 1:
$chars = str_repeat('0123456789', 3);
break;
case 2:
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' . $addChars;
break;
case 3:
$chars = 'abcdefghijklmnopqrstuvwxyz' . $addChars;
break;
case 4:
default :
//默认去掉了容易混淆的字符oOLl和数字01,要添加请使用addChars参数
$chars = 'ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789' . $addChars;
break;
}
if ($len > 10) {//位数过长重复字符串一定次数
$chars = $type == 1 ? str_repeat($chars, $len) : str_repeat($chars, 5);
}
$chars = str_shuffle($chars);
$str = substr($chars, 0, $len);
return $str;
}
获取一定范围内的随机数字 位数不足补零
/**
* 获取一定范围内的随机数字 位数不足补零
* @param integer $min 最小值
* @param integer $max 最大值
* @return string
*/
function randNumber(int $min, int $max)
{
return sprintf("%0" . strlen($max) . "d", mt_rand($min, $max));
}
获取相对时间
/**
* 获取相对时间
* @param int $timestamp 10位时间戳
* @return string
*/
function getDate(int $timestamp)
{
$now = time();
$diff = $now - $timestamp;
if ($diff <= 60) {
return $diff . '秒前';
} elseif ($diff <= 3600) {
return floor($diff / 60) . '分钟前';
} elseif ($diff <= 86400) {
return floor($diff / 3600) . '小时前';
} elseif ($diff <= 2592000) {
return floor($diff / 86400) . '天前';
} else {
return '一个月前';
}
}
图片地址转换base6
/**
* 将图片地址转为base64
* @param string $img_url 图片url地址
* @param bool $prefix 是否拼接前缀
* @return string
*/
function ImageToBase64(string $img_url, bool $prefix = false)
{
//将图片链接转换为base64
$base64 = chunk_split(base64_encode(file_get_contents($img_url)));
//是否需要拼接前缀,false返回base64
if (!$prefix) return $base64;
//获取图像信息,并拼接前缀
$image_info = getimagesize($img_url);
return 'data:' . $image_info['mime'] . ';base64,' . $base64;
}
将查询的二维对象转换成二维数组
/**
* 将查询的二维对象转换成二维数组
* @param $data
* @param string $key 允许指定索引值
* @return array
*/
function buildArrFromObj($data, string $key = '')
{
$arr = [];
foreach ($data as $value) {
$value = $value->toArray();
if ($key) {
$arr[$value[$key]] = $value;
} else {
$arr[] = $value;
}
}
return $arr;
}
检查字符串是否是UTF8编码
/**
* 检查字符串是否是UTF8编码
* @param $string 字符串
* @return bool
*/
function isUtf8($string)
{
$len = strlen($string);
for ($i = 0; $i < $len; $i++) {
$c = ord($string[$i]);
if ($c > 128) {
if (($c >= 254)) return false;
elseif ($c >= 252) $bits = 6;
elseif ($c >= 248) $bits = 5;
elseif ($c >= 240) $bits = 4;
elseif ($c >= 224) $bits = 3;
elseif ($c >= 192) $bits = 2;
else return false;
if (($i + $bits) > $len) return false;
while ($bits > 1) {
$i++;
$b = ord($string[$i]);
if ($b < 128 || $b > 191) return false;
$bits--;
}
}
}
return true;
}
构建随机IP地址
/**
* 构建随机IP地址
* @return string
*/
function randomIp()
{
$ipLong = [
['607649792', '608174079'], // 36.56.0.0-36.63.255.255
['1038614528', '1039007743'], // 61.232.0.0-61.237.255.255
['1783627776', '1784676351'], // 106.80.0.0-106.95.255.255
['2035023872', '2035154943'], // 121.76.0.0-121.77.255.255
['2078801920', '2079064063'], // 123.232.0.0-123.235.255.255
['-1950089216', '-1948778497'], // 139.196.0.0-139.215.255.255
['-1425539072', '-1425014785'], // 171.8.0.0-171.15.255.255
['-1236271104', '-1235419137'], // 182.80.0.0-182.92.255.255
['-770113536', '-768606209'], // 210.25.0.0-210.47.255.255
['-569376768', '-564133889'], // 222.16.0.0-222.95.255.255
];
$randKey = mt_rand(0, 9);
return $ip = long2ip(mt_rand($ipLong[$randKey][0], $ipLong[$randKey][1]));
}
随机生成一个URL协议
/**
* 随机生成一个URL协议
* @return string
*/
function randomProtocol()
{
$proArr = [
'http',
'ftp',
'gopher',
'mailto',
'mid',
'cid',
'news',
'nntp',
'prospero',
'telnet',
'rlogin',
'tn3270',
'wais'
];
shuffle($proArr);
return $proArr[0];
}
获取客户端IP
/**
* 获取客户端IP
* @return mixed|string
*/
function getIp()
{
$client_ip = '';
if (isset($_SERVER)) {
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
//优先使用 HTTP_X_FORWARDED_FOR,此值是一个逗号分割的多个IP
//注意:我这里没做处理,是因为运维在入口处禁止了伪造请求头,HTTP_X_FORWARDED_FOR是可信的,不能代表所有业务场景
//Todo 没有禁止伪造请求头下的特殊处理
$ipStr = $_SERVER["HTTP_X_FORWARDED_FOR"];
$ipArr = explode(',', $ipStr);
$client_ip = isset($ipArr[0]) ? $ipArr[0] : '';
} else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$client_ip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$client_ip = $_SERVER["REMOTE_ADDR"];
}
}
//过滤无效IP
if (filter_var($client_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false || filter_var($client_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false) {
return $client_ip;
} else {
return $_SERVER["REMOTE_ADDR"];
}
}