mirror of
https://gitee.com/apiadmin/ApiAdmin.git
synced 2025-04-05 19:41:43 +08:00
186 lines
5.8 KiB
PHP
186 lines
5.8 KiB
PHP
<?php
|
||
declare (strict_types=1);
|
||
/**
|
||
* 构建各类有意义的随机数
|
||
* @since 2018-08-07
|
||
* @author zhaoxiang <zhaoxiang051405@gmail.com>
|
||
*/
|
||
|
||
namespace app\util;
|
||
|
||
class StrRandom {
|
||
|
||
/**
|
||
* 构建一个随机浮点数
|
||
* @param int $min 整数部分的最小值,默认值为-999999999
|
||
* @param int $max 整数部分的最大值,默认值为999999999
|
||
* @param int $dmin 小数部分位数的最小值,默认值为 0
|
||
* @param int $dmax 小数部分位数的最大值,默认值为 8
|
||
* @return float
|
||
* @author zhaoxiang <zhaoxiang051405@gmail.com>
|
||
*/
|
||
public static function randomFloat(int $min = -999999999, int $max = 999999999, int $dmin = 0, int $dmax = 8): float {
|
||
$rand = '';
|
||
$intNum = mt_rand($min, $max);
|
||
$floatLength = mt_rand($dmin, $dmax);
|
||
if ($floatLength > 1) {
|
||
$rand = Strs::randString($floatLength - 1, 1);
|
||
}
|
||
$floatEnd = mt_rand(1, 9);
|
||
|
||
return floatval($intNum . '.' . $rand . $floatEnd);
|
||
}
|
||
|
||
/**
|
||
* 获取随机的时间
|
||
* @param string $format PHP的时间日期格式化字符
|
||
* @return false|string
|
||
* @author zhaoxiang <zhaoxiang051405@gmail.com>
|
||
*/
|
||
public static function randomDate(string $format = 'Y-m-d H:i:s'): string {
|
||
$timestamp = time() - mt_rand(0, 86400 * 3650);
|
||
|
||
return date($format, $timestamp);
|
||
}
|
||
|
||
/**
|
||
* 构建随机IP地址
|
||
* @return string
|
||
* @author zhaoxiang <zhaoxiang051405@gmail.com>
|
||
*/
|
||
public static function randomIp(): string {
|
||
$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 协议
|
||
* @return mixed
|
||
* @author zhaoxiang <zhaoxiang051405@gmail','com>
|
||
*/
|
||
public static function randomProtocol(): string {
|
||
$proArr = [
|
||
'http',
|
||
'ftp',
|
||
'gopher',
|
||
'mailto',
|
||
'mid',
|
||
'cid',
|
||
'news',
|
||
'nntp',
|
||
'prospero',
|
||
'telnet',
|
||
'rlogin',
|
||
'tn3270',
|
||
'wais'
|
||
];
|
||
shuffle($proArr);
|
||
|
||
return $proArr[0];
|
||
}
|
||
|
||
/**
|
||
* 随机生成一个顶级域名
|
||
* @author zhaoxiang <zhaoxiang051405@gmail','com>
|
||
*/
|
||
public static function randomTld(): string {
|
||
$tldArr = [
|
||
'com', 'cn', 'xin', 'net', 'top', '在线',
|
||
'xyz', 'wang', 'shop', 'site', 'club', 'cc',
|
||
'fun', 'online', 'biz', 'red', 'link', 'ltd',
|
||
'mobi', 'info', 'org', 'edu', 'com.cn', 'net.cn',
|
||
'org.cn', 'gov.cn', 'name', 'vip', 'pro', 'work',
|
||
'tv', 'co', 'kim', 'group', 'tech', 'store', 'ren',
|
||
'ink', 'pub', 'live', 'wiki', 'design', '中文网',
|
||
'我爱你', '中国', '网址', '网店', '公司', '网络', '集团', 'app'
|
||
];
|
||
shuffle($tldArr);
|
||
|
||
return $tldArr[0];
|
||
}
|
||
|
||
/**
|
||
* 获取一个随机的域名
|
||
* @return string
|
||
* @author zhaoxiang <zhaoxiang051405@gmail.com>
|
||
*/
|
||
public static function randomDomain(): string {
|
||
$len = mt_rand(6, 16);
|
||
|
||
return strtolower(Strs::randString($len)) . '.' . self::randomTld();
|
||
}
|
||
|
||
/**
|
||
* 随机生成一个URL
|
||
* @param string $protocol 协议名称,可以不用指定
|
||
* @return string
|
||
* @author zhaoxiang <zhaoxiang051405@gmail.com>
|
||
*/
|
||
public static function randomUrl($protocol = ''): string {
|
||
$protocol = $protocol ? $protocol : self::randomProtocol();
|
||
|
||
return $protocol . '://' . self::randomDomain();
|
||
}
|
||
|
||
/**
|
||
* 随机生成一个邮箱地址
|
||
* @param string $domain 可以指定邮箱域名
|
||
* @return string
|
||
* @author zhaoxiang <zhaoxiang051405@gmail.com>
|
||
*/
|
||
public static function randomEmail($domain = ''): string {
|
||
$len = mt_rand(6, 16);
|
||
$domain = $domain ? $domain : self::randomDomain();
|
||
|
||
return Strs::randString($len) . '@' . $domain;
|
||
|
||
}
|
||
|
||
|
||
public static function randomPhone(): string {
|
||
$prefixArr = [133, 153, 173, 177, 180, 181, 189, 199, 134, 135,
|
||
136, 137, 138, 139, 150, 151, 152, 157, 158, 159, 172, 178,
|
||
182, 183, 184, 187, 188, 198, 130, 131, 132, 155, 156, 166,
|
||
175, 176, 185, 186, 145, 147, 149, 170, 171];
|
||
shuffle($prefixArr);
|
||
|
||
return $prefixArr[0] . Strs::randString(8, 1);
|
||
}
|
||
|
||
/**
|
||
* 随机创建一个身份证号码
|
||
* @return string
|
||
* @author zhaoxiang <zhaoxiang051405@gmail.com>
|
||
*/
|
||
public static function randomId(): string {
|
||
$prefixArr = [
|
||
11, 12, 13, 14, 15,
|
||
21, 22, 23,
|
||
31, 32, 33, 34, 35, 36, 37,
|
||
41, 42, 43, 44, 45, 46,
|
||
50, 51, 52, 53, 54,
|
||
61, 62, 63, 64, 65,
|
||
71, 81, 82
|
||
];
|
||
shuffle($prefixArr);
|
||
|
||
$suffixArr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'X'];
|
||
shuffle($suffixArr);
|
||
|
||
return $prefixArr[0] . '0000' . self::randomDate('Ymd') . Strs::randString(3, 1) . $suffixArr[0];
|
||
}
|
||
}
|