通过身份证号获取生日
php
function get_birthday($id_card = '') {
if (!$id_card) {
return '';
}
if (strlen($id_card) === 18) {
return substr($id_card,6,4) . '-' . substr($id_card,10,2) . '-' . substr($id_card,12,2);
}
if (strlen($id_card) === 15) {
return '19' . substr($id_card,6,2) . '-' . substr($id_card,8,2) . '-' . substr($id_card,10,2);
}
return '';
}
获取访问者的IP
php
function get_ip(){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")){
$ip = getenv("HTTP_CLIENT_IP");
}else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")){
$ip = getenv("HTTP_X_FORWARDED_FOR");
}else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")){
$ip = getenv("REMOTE_ADDR");
}else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")){
$ip = $_SERVER['REMOTE_ADDR'];
} else {
$ip = "unknown";
}
return($ip);
}
get_ip()
对二维数组进行排序
php
/**
* 对二维数组进行排序
* @param array $list 对二维数组
* @param string $field 排序的键名
* @param string $sortby 排序类型 (asc正向排序 desc逆向排序 nat自然排序)
* @return array
*/
function list_sort_by($list = [], $field = 'id', $sortby = 'asc'){
if (is_array($list)){
$refer = $resultSet = array();
foreach ($list as $i => $data){
$refer[$i] = &$data[$field];
}
switch ($sortby){
case 'asc': // 正向排序
asort($refer);
break;
case 'desc': // 逆向排序
arsort($refer);
break;
case 'nat': // 自然排序
natcasesort($refer);
break;
}
foreach ($refer as $key => $val){
$resultSet[] = &$list[$key];
}
return $resultSet;
}
return false;
}
$new_list = list_sort_by($list, 'class', 'asc');//按照数组里的class进行排序
echo '<pre>';//原样输出数组
print_r($new_list);
echo '<pre>';
获取指定时间内日期、月份、季度、年份
php
/**
* 查询指定时间范围内的所有 日期,月份,季度,年份
* @param $startDate 指定开始时间,Y-m-d格式
* @param $endDate 指定结束时间,Y-m-d格式
* @param $type 类型,day 天,month 月份,quarter 季度,year 年份
* @return array
*/
function getDate($startDate = '2025-01-01', $endDate = '2025-02-01', $type = 'day') {
if (date('Y-m-d', strtotime($startDate)) != $startDate || date('Y-m-d', strtotime($endDate)) != $endDate) {
return '日期格式不正确';
}
$tempDate = $startDate;
$returnData = [];
$i = 0;
if ($type == 'day') { // 查询所有日期
while (strtotime($tempDate) < strtotime($endDate)) {
$tempDate = date('Y-m-d', strtotime('+' . $i . ' day', strtotime($startDate)));
$returnData[] = $tempDate;
$i++;
}
} elseif ($type == 'month') { // 查询所有月份以及开始结束时间
while (strtotime($tempDate) < strtotime($endDate)) {
$temp = [];
$month = strtotime('first day of +' . $i . ' month', strtotime($startDate));
$temp['name'] = date('m', $month);
$temp['startDate'] = date('Y-m-01', $month);
$temp['endDate'] = date('Y-m-t', $month);
$tempDate = $temp['endDate'];
$returnData[] = $temp;
$i++;
}
} elseif ($type == 'quarter') { // 查询所有季度以及开始结束时间
while (strtotime($tempDate) < strtotime($endDate)) {
$temp = [];
$quarter = strtotime('first day of +' . $i . ' month', strtotime($startDate));
$q = ceil(date('n', $quarter) / 3);
$temp['name'] = date('Y', $quarter) . '第' . $q . '季度';
$temp['startDate'] = date('Y-m-01', mktime(0, 0, 0, $q * 3 - 3 + 1, 1, date('Y', $quarter)));
$temp['endDate'] = date('Y-m-t', mktime(23, 59, 59, $q * 3, 1, date('Y', $quarter)));
$tempDate = $temp['endDate'];
$returnData[] = $temp;
$i = $i + 3;
}
} elseif ($type == 'year') { // 查询所有年份以及开始结束时间
while (strtotime($tempDate) < strtotime($endDate)) {
$temp = [];
$year = strtotime('+' . $i . ' year', strtotime($startDate));
$temp['name'] = date('Y', $year) . '年';
$temp['startDate'] = date('Y-01-01', $year);
$temp['endDate'] = date('Y-12-31', $year);
$tempDate = $temp['endDate'];
$returnData[] = $temp;
$i++;
}
}
return $returnData;
}
getDate('2025-01-01','2025-02-01','day')
生成N位随机数
php
function rand($n = 10) {
$metas = range(0, 9);
$metas = array_merge($metas, range('A', 'Z'));
$metas = array_merge($metas, range('a', 'z'));
$str = '';
for ($i = 0; $i < $n; $i++) {
$str .= $metas[rand(0, count($metas) - 1)];
}
return $str;
}
rand(5)
格式化小数
php
/**
* @param float $num 小数
* @param int $decimal 保留小数位数
* @return string
*/
function format($num = 0,$decimal = 2){
return $num ? sprintf("%.".$decimal."f",$num):'0.00';
}
format(3.655)
银行卡号格式化
银行卡号每4位加空格,13到16位用*表示
php
function strreplace($str, $startlen = 12, $endlen = 3) {
$repstr = "";
if (strlen($str) < ($startlen + $endlen + 1)) {
return $str;
}
$count = strlen($str) - $startlen - $endlen;
for ($i = 0; $i < $count; $i++) {
$repstr .= "*";
}
$str = preg_replace('/(\d{' . $startlen . '})\d+(\d{' . $endlen . '})/', '${1}' . $repstr . '${2}', $str);
$ns = [4, 9, 14, 19];
for ($i = 0; $i < 4; $i++) {
$str = str_insert($str, $ns[$i], ' ');
}
return $str;
}
//字符中插入字符串方法
function str_insert($str, $i, $substr) {
$startstr = '';
$laststr = '';
for ($j = 0; $j < $i; $j++) {
$startstr .= $str[$j];
}
for ($j = $i; $j < strlen($str); $j++) {
$laststr .= $str[$j];
}
$str = ($startstr . $substr . $laststr);
return $str;
}
strreplace('6212345678901234');
生成邀请码
php
/**
* 根据用户ID生成邀请码
* @param $userId
* @return string
*/
function getInviteCode($userId)
{
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$num = strlen($chars);
$str = '';
while ($userId > 0) {
$mod = $userId % $num;
$userId = ($userId - $mod) / $num;
$str = $chars[$mod] . $str;
}
// 不足用随机字符串补充,10表示邀请码邀请10位
$str = str_pad($str, 10, createNonceStr(10 - strlen($str)), STR_PAD_LEFT);
return $str;
}
function createNonceStr($length = 16)
{
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$str = '';
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
给字符串加密解密并自定义加密位数
(例如:给ID加密到展示N位字符串,也可用于邀请码)
php
function alphaID($in, $to_num = false, $pad_up = false, $passKey = null)
{
$key = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$i = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
if ($passKey !== null) {
$len = strlen($key);
$passhash = hash('sha256',$passKey);
$passhash = (strlen($passhash) < $len) ? hash('sha512',$passKey) : $passhash;
for ($n=0; $n < $len; $n++) {
$p[] = substr($passhash, $n ,1);
}
array_multisort($p, SORT_DESC, $i);
$key = implode($i);
}
$base = strlen($key);
if ($to_num) {
$in = strrev($in);
$out = 0;
$len = strlen($in) - 1;
for ($t = 0; $t <= $len; $t++) {
$bcpow = bcpow($base, $len - $t);
$out = $out + strpos($key, substr($in, $t, 1)) * $bcpow;
}
if (is_numeric($pad_up)) {
$pad_up--;
if ($pad_up > 0) {
$out -= pow($base, $pad_up);
}
}
} else {
if (is_numeric($pad_up)) {
$pad_up--;
if ($pad_up > 0) {
$in += pow($base, $pad_up);
}
}
$out = "";
for ($t = floor(log10($in) / log10($base)); $t >= 0; $t--) {
$a = floor($in / bcpow($base, $t));
$out = $out . substr($key, $a, 1);
$in = $in - ($a * bcpow($base, $t));
}
$out = strrev($out); // reverse
}
return $out;
}
//加密到8位数
alphaID(【要加密的数据】,true,8);
//调用解密
alphaID(【要解密的数据】,false,8);
自定义日志封装方法
(主要用于日志写入)
php
function logCustomMessage($message = '', $level = 'INFO',$path = '/logs/gongpai/') {
// 拼接日志目录路径
$logPath = APPPATH . $path;
if (!is_dir($logPath)) {
mkdir($logPath, 0777, true);
}
// 构造日志内容
$timestamp = date('Y-m-d H:i:s');
$logEntry = "[$timestamp] [$level] $message\n";
file_put_contents($logPath . date('Y-m-d').'.log', $logEntry, FILE_APPEND);
return true;
}
//调用方法
logCustomMessage("debug", '错误----提示:'.json_encode([],JSON_UNESCAPED_UNICODE));