🔓 Ultimate Webshell - Penetration Testing Tool

📖 File Reader

<?php
namespace app\api\common;
use app\BaseController;
use app\common\Common_time;
use think\facade\Db;
use think\facade\Session;
use think\facade\View;

/**
 * 会员信息
 */
class Common_user extends BaseController
{
    /**
     * 会员信息
     * @param $user_miyao 会员秘钥
     */
    static public function user_info($user_miyao)
    {
        $user_info = db::name("user")->where("user_miyao = '$user_miyao'")->field("user_id,superior_id,rank_id,rank_id_priority,user_miyao,head,nickname,user_name,identity_z,identity_f,name,identity,bank,bank_card,mobile,motto,invitation_code,add_time,freeze_money,integral,pay_password,priority_rank_id_time,open_id,is_deliver,region_id")->find();
        if (!empty($user_info)){
            $user_info["money"] = Common_user::user_money($user_info["user_id"]);
        }
        return $user_info;
    }

    /**
     * 实名认证检测
     * @param int $user_id 会员信息检测
     */
    static function user_detection($user_id=0)
    {
        $user_info = db::name("user")->alias("a")
            ->join("user_detail b","a.user_id = b.user_id","LEFT")
            ->field("a.*,b.motorcycle_type,b.plate_number,b.motorcycle_expire_time")
            ->where("a.user_id = $user_id")
            ->find();
        if ($user_info["name"] == '' || $user_info["identity"] == '' || $user_info["mobile"] == ''){
            $data = [
                'code'=>400,
                'msg'=>'请先完善会员信息',
            ];
            return $data;
        }
        $data = [
            'code'=>200,
            'msg'=>'检测通过',
        ];
        return $data;
    }

    /**
     * 生日检测(今天是否过生日)
     * @param string $idcard 生日
     */
    static function user_birthday($idcard='')
    {
        $shengri = Common_user::get_birthday($idcard);
        $shengri = strstr ($shengri,"-");
        $shengri = substr($shengri, 1);//根据身份证号获取的生日日期
        //今日日期
        $time_y = preg_replace('/^0*/', '', date("m",time()));
        $time_r = preg_replace('/^0*/', '', date("d",time()));
        $time = $time_y.'-'.$time_r;
        $is_celebrate = 0;
        if ($shengri == $time){
            $is_celebrate = 1;//今日过生日
        }
        return $is_celebrate;
    }

    /**
     *  根据身份证号码获取生日
     *  author:xiaochuan
     *  @param string $idcard    身份证号码
     *  @return $birthday
     */
    static function get_birthday($idcard) {
        if(empty($idcard)) return null;
        $bir = substr($idcard, 6, 8);
        $year = (int) substr($bir, 0, 4);
        $month = (int) substr($bir, 4, 2);
        $day = (int) substr($bir, 6, 2);
        return $year . "-" . $month . "-" . $day;
    }

    /**
     * 姓名加密
     * @param string $name 姓名
     * @return string
     */
    static function encryptName($name='') {
        $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 $phoneNumber 手机号
     * @param $start 从第几位开始
     * @param $length 加密位数
     * @return array|string|string[]
     */
    static function encryptPhoneNumber($phoneNumber, $start = 3, $length = 4) {
        return substr_replace($phoneNumber, str_repeat('*', $length), $start, $length);
    }

    /**
     * 会员可用余额
     * @param $user_id 会员id
     */
    static function user_money($user_id)
    {
        $user = db::name("user")->where("user_id = $user_id")->field("money,freeze_money")->find();
        $money = $user["money"] - $user["freeze_money"];
        if ($money <= 0){
            $money = 0;
        }
        return sprintf("%.2f",$money);
    }

    /**
     * 查询冻结余额
     */
    static function freeze_money($user_id)
    {
        $freeze_money = db::name("user")->where("user_id = $user_id")->value("freeze_money");
        return $freeze_money;
    }

    /**
     * 会员级别
     * @param $user_id 会员id
     */
    static function user_rank($user_id)
    {
        $time_info = Common_time::time_info();
        //上个月最后升级记录
        $up_user_rank = db::name("user_rank_upgrade_log")->alias("a")
            ->join("user_rank b","a.rank_id = b.rank_id")
            ->field("b.rank_id,b.name as rank_name")
            ->where("a.add_time >= $time_info[b_time] and a.add_time <= $time_info[e_time]")
            ->order("a.id desc")
            ->find();
        if (empty($up_user_rank)){
            $arr["up_rank_id"] = 0;
            $arr["up_rank_name"] = '';
        }else{
            $arr["up_rank_id"] = $up_user_rank["rank_id"];
            $arr["up_rank_name"] = $up_user_rank["rank_name"];
        }
        //当前会员等级
        $user_info = db::name("user")->alias("a")
            ->join("user_rank b","a.rank_id = b.rank_id","LEFT")
            ->join("user_rank c","a.rank_id_priority = c.rank_id","LEFT")
            ->field("a.user_id,a.priority_rank_id_time,a.rank_id,b.name as rank_name,a.rank_id_priority,c.name as rank_name_priority")
            ->where("a.user_id = $user_id")
            ->find();
        if ($user_info["priority_rank_id_time"] >= time()){
            $arr["rank_id"] = $user_info["rank_id_priority"];
            $arr["rank_name"] = $user_info["rank_name_priority"];
        }else{
            $arr["rank_id"] = $user_info["rank_id"];
            $arr["rank_name"] = $user_info["rank_name"];
        }
        return $arr;
    }

    /**
     * 支付密码验证
     * @param $user_miyao 会员秘钥
     * @param $pay_password 支付密码
     */
    static function pay_password_verify($user_miyao,$pay_password)
    {
        $user_info = Common_user::user_info($user_miyao);
        if (empty($user_info["pay_password"])){
            $data = [
                'code' => 302,
                'msg'=>'请先设置支付密码',
            ];
            return $data;
        }else{
            if (empty($pay_password)){
                $data = [
                    'code' => 400,
                    'msg'=>'请输入支付密码',
                ];
                return $data;
            }else{
                if ($user_info["pay_password"] != md5($pay_password)){
                    $data = [
                        'code' => 400,
                        'msg'=>'支付密码错误',
                    ];
                    return $data;
                }
            }
        }
        $data = [
            'code' => 200,
            'msg'=>'ok',
        ];
        return $data;

    }

    /**
     * 创建会员秘钥
     */
    static function user_miyao_add($num)
    {
        $suijishu = Common_user::suijishu($num);
        while (!empty(db::name("user")->where("user_miyao = '$suijishu'")->count())){
            $suijishu = Common_user::suijishu($num);
        }
        return $suijishu;
    }

    /**
     * 创建会员邀请码
     * @param $num 位数
     */
    static function user_invitation_code_add($num)
    {
        $suijishu = Common_user::suijishu($num);
        while (!empty(db::name("user")->where("invitation_code = '$suijishu'")->count())){
            $suijishu = Common_user::suijishu($num);
        }
        return $suijishu;
    }

    /**
     * 随机数
     * @param $len 生成位数
     * @param $type 默认字母数组混合
     */
    static function suijishu($len,$type=0){
        if ($type == 0){
            $chars_array = array(
                "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", "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",
            );
        }else{
            $chars_array = array(
                "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
            );
        }
        $charsLen = count($chars_array) - 1;
        $outputstr = "";
        for ($i=0; $i<$len; $i++)
        {
            $outputstr .= $chars_array[mt_rand(0, $charsLen)];
        }
        return $outputstr;
    }

    /**
     * 获取自己这条线的全部上级(默认包含自己)
     * @param int $user_id 会员id
     * @param int $type 是否包含自己:1是 0否
     */
    static function user_wire($user_id=0,$type=1)
    {
        if (empty($type)) {
            $user_str_id = '';
        } else {
            $user_str_id = $user_id . ',';
        }
        while (!empty($user_id)) {
            $superior_id = db::name("user")->where("user_id = $user_id")->value('superior_id');
            if (!empty($superior_id)) {
                $user_str_id .= $superior_id . ',';
            }
            //重新定义
            $user_id = $superior_id;
        }
        return substr($user_str_id, 0, strlen($user_str_id) - 1);
    }

    /**
     * 获取所有直推下级(默认包含自己)
     * @param int $user_id 会员id
     * @param int $type 类型:1包含自己 0不包含
     */
    static function subordinate_id($user_id=0,$type=1)
    {
        $user_list_id = db::name("user")->where("superior_id = $user_id")->field("user_id")->select();
        $id = $type==1?$user_id.',':'';
        foreach ($user_list_id as $k => $v){
            $id .= $v["user_id"].",";
        }
        $id = substr($id,0,strlen($id)-1);
        return $id;
    }

    /**
     * 获取无限层团队下级(默认包含自己)
     * @param $user_id 会员id
     * @param int $type 类型:1包含自己 0不包含
     */
    static function team_subordinate_id($user_id=0,$type=1)
    {
        $team_id = $user_id;
        $team_user_id = $type==1?$user_id.',':'';
        while ($team_id){
            $user_list_id = db::name("user")->where("superior_id in($team_id)")->field("user_id")->select();
            $id = '';
            foreach ($user_list_id as $k => $v){
                $id .= $v["user_id"].',';
            }
            $id = substr($id,0,strlen($id)-1);
            if (!empty($id)){
                $team_user_id .= $id.',';
            }
            //重新定义
            $team_id = $id;
        }
        return substr($team_user_id,0,strlen($team_user_id)-1);
    }

    /**
     * 数组重装(根据父级重装)
     * @param array $arr 全部数组
     * @param int $superior_id
     * @return array
     */
    public function array_reinstallation($arr=[],$superior_id=0)
    {
        $arr_list = $arr;
        $arr_xin = [];
        foreach ($arr as $v){
            $v_superior_id = $v["superior_id"];
            /*筛选上级是否存在,不存在重置上级id*/
            $is_cunzai = 0;
            foreach ($arr_list as $v2){
                if ($v_superior_id == $v2["id"]){
                    $is_cunzai = 1;
                }
            }
            $v_superior_id = $is_cunzai==0?0:$v_superior_id;
            if ($v_superior_id == $superior_id){
                $list = $this->array_reinstallation($arr_list,$v["id"]);
                $v["order_sublevel"] = $list;
                $arr_xin[] = $v;
            }
        }
        return $arr_xin;
    }
}