生成随机20万测试数据

2023-04-06 01:252299
<?php
namespace api\random\controller;

use cmf\controller\RestBaseController;
use think\Facade\Db;
use think\helper\Str;

class RandomController extends RestBaseController
{
    public function index()
    {
        // 生成20万个随机数据
        for($i = 0; $i < 200000; $i++){
            $wxUserData = [
                'nickName' => $this->generateNicknameSimple(),
                'gender' => mt_rand(0, 2),
                'language' => "zh_CN",
                'city' => '',
                'province' => '',
                'country' => '',
                'avatarUrl' => 'https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132',
                'sessionKey' => $this->getRandChar(28),
            ];

            //TODO 使用事务做用户注册
            $user = [
                'create_time'     =>  $this->generateTimestamp(),
                'user_status'     => 1,
                'user_type'       => 2,
                'sex'             => $wxUserData['gender'],
                'user_nickname'   => $wxUserData['nickName'],
                'avatar'          => $wxUserData['avatarUrl'],
                'last_login_ip'   => $this->generateIpAddress(),
                'last_login_time' => time(),
            ];

            $userId = Db::name("user")->insertGetId($user);

            $token = cmf_generate_user_token($userId, 'wxapp');

            Db::name("third_party_user")->insert([
                'openid'          => $this->getRandChar(28),
                'user_id'         => $userId,
                'third_party'     => 'wxapp',
                'app_id'          => 'wxb630438f5338e30b',
                'last_login_ip'   => $this->generateIpAddress(),
                'union_id'        => '',
                'last_login_time' => time(),
                'create_time'     => $this->generateTimestamp(),
                'login_times'     => mt_rand(0, 100),
                'status'          => 1,
                'more'            => json_encode($wxUserData)
            ]);

            $name = $this->generateNameSimple();
            $id_card = $this->generateIdNumber();
            $mobile = $this->generatePhoneNumber();

            $order_id = Db::name("order")->insertGetId([
                'activity_id'     => 1,
                'goods_id'        => mt_rand(1, 2),
                'meetingplace_id' => mt_rand(1, 5),
                'user_id'         => $userId,
                'order_sn'        => cmf_get_order_sn(),
                'name'            => $name,
                'id_card'         => $id_card,
                'mobile'          => $mobile,
                'company'         =>'未知',
                'logo'            =>'',
                'amount'          =>9.9,
                'thumbnail'       =>'',
                'order_type'      =>1,
                'order_status'    =>0,
                'pay_status'      =>1,
                'payment_id'      =>1,
                'payment_name'    =>'微信支付',
                'pay_time'        =>time(),
                'create_time'     =>time(),
                'update_time'     =>time(),
            ]);

            Db::name("info")->insert([
                'user_id'         => $userId,
                'order_id'        => $order_id,
                'name'            => $name,
                'id_card'         => $id_card,
                'mobile'          => $mobile,
                'thumbnail'       => '',
                'status'          => 1,
                'create_time'     => $user['last_login_time'],
                'update_time'     => $user['last_login_time']
            ]);
        }

        // 写入数据库
        // Db::name('random_data')->insertAll($data);

        return '生成成功';
    }

    private function generateNickname()
    {
        // 生成一个3-10个汉字的昵称
        $length = mt_rand(3, 10);
        $name = '';
        for ($i = 0; $i < $length; $i++) {
            $name .= mb_chr(mt_rand(0x4E00, 0x9FA5));
        }
        return $name;
    }
   
    function generateNicknameSimple() {
        // 生成汉字昵称,常见字
        // 定义中文常用姓氏和名字
        $surnames = ['王', '李', '张', '刘', '陈', '杨', '黄', '赵', '周', '吴', '徐', '孙', '胡', '朱', '高', '林', '何', '郭', '马', '罗'];
        $names = ['伟', '芳', '娜', '秀英', '敏', '静', '丽', '强', '磊', '军', '洋', '勇', '艳', '杰', '娟', '涛', '明', '超', '秀兰', '霞'];

        // 定义常用名词、形容词和动词
        $nouns = ['梦', '心', '情', '雨', '阳光', '海洋', '风', '星空', '音乐', '微笑', '快乐', '幸福', '爱', '友情', '诗', '悲伤', '思念', '回忆', '希望', '勇气'];
        $adjectives = ['美丽的', '善良的', '温柔的', '可爱的', '聪明的', '开心的', '快乐的', '幸福的', '自由的', '热情的', '真诚的', '纯洁的', '勇敢的', '坚强的', '温暖的', '明亮的', '激情的', '感性的', '理性的', '唯美的', '精彩的'];
        $verbs = ['爱', '思念', '怀念', '忘记', '珍惜', '守护', '相信', '祝福', '微笑', '欣赏', '感受', '陪伴', '成长', '努力', '追求', '梦想', '坚持', '超越', '创造', '分享'];
        // 随机生成姓名
        $nickname = $surnames[mt_rand(0, count($surnames) - 1)] . $names[mt_rand(0, count($names) - 1)];
        // 随机生成形容词和名词
        $adjective = $adjectives[mt_rand(0, count($adjectives) - 1)];
        $noun = $nouns[mt_rand(0, count($nouns) - 1)];

        // 随机生成动词
        $verb = $verbs[mt_rand(0, count($verbs) - 1)];

        // 随机决定名词和形容词的顺序
        $order = mt_rand(0, 1);
        if ($order == 0) {
            $nickname .= $adjective . $noun;
        } else {
            $nickname .= $noun . $adjective;
        }

        // 随机加上动词
        if (mt_rand(0, 1) == 1) {
            $nickname .= $verb;
        }

        // 返回昵称
        return $nickname;
               
    }

    private function generateTimestamp()
    {
        // 生成一个随机的时间戳
        $timestamp = mt_rand(1680000000, time());
        return $timestamp;
    }

    private function generateIpAddress()
    {
        // 生成一个随机的IPv4地址
        $ip = [];
        for($i = 0; $i < 4; $i++) {
            $ip[] = mt_rand(0, 255);
        }
        return implode('.', $ip);
    }

    private function generateName()
    {
        // 生成一个随机的中文姓名
        $surname = [
            '赵', '钱', '孙', '李', '周', '吴', '郑', '王', '冯', '陈',
            '楮', '卫', '蒋', '沈', '韩', '杨', '朱', '秦', '尤', '许',
            '何', '吕', '施', '张', '孔', '曹', '严', '华', '金', '魏',
            '陶', '姜', '戚', '谢', '邹', '喻', '柏', '水', '窦', '章',
            '云', '苏', '潘', '葛', '奚', '范', '彭', '郎', '鲁', '韦',
            '昌', '马', '苗', '钟', '骆', '戴', '贾', '田', '堵', '储',
            '卢', '杜', '胡', '南宫', '欧阳', '夏侯', '诸葛', '皇甫',
            '司马', '公孙', '慕容', '长孙', '司徒', '轩辕', '令狐',
            '宇文', '司空', '鲜于', '闾丘', '东方', '子车', '呼延',
            '赫连', '司寇', '浦', '尚', '农', '温', '别', '庄', '晏',
            '柴', '瞿', '阎', '充', '慕', '连', '茹', '习', '宦',
            '艾', '鱼', '容', '向', '古', '易', '慎', '戈', '廖',
            '庾', '终', '暨', '居', '衡', '步', '都', '耿', '满',
            '弘', '匡', '文', '国', '寇', '广', '禄', '阙', '东',
            '欧', '殳', '沃', '利', '蔚', '越', '夔', '隆', '师',
            '巩', '厍', '聂', '晁', '勾', '敖', '融', '冷', '訾',
            '辛', '阚', '那', '简', '饶', '空', '曾', '毋', '沙',
            '乜', '养', '鞠', '须', '丰', '巢', '关', '蒯', '相',
            '查', '后', '荆', '红', '游', '竺', '权', '逯', '盖',
            '益', '桓', '公', '万', '俟', '司空'];
        $name = $surname[mt_rand(0, count($surname) - 1)];
        $length = mt_rand(1, 2);
        for($i = 0; $i < $length; $i++) {
            $name .= mb_chr(mt_rand(0x4E00, 0x9FA5));
        }
        return $name;
    }

    // 生成姓名,常见字
    function generateNameSimple() {
        $surnames = [
            '赵', '钱', '孙', '李', '周', '吴', '郑', '王', '冯', '陈',
            '楮', '卫', '蒋', '沈', '韩', '杨', '朱', '秦', '尤', '许',
            '何', '吕', '施', '张', '孔', '曹', '严', '华', '金', '魏',
            '陶', '姜', '戚', '谢', '邹', '喻', '柏', '水', '窦', '章',
            '云', '苏', '潘', '葛', '奚', '范', '彭', '郎', '鲁', '韦',
            '昌', '马', '苗', '钟', '骆', '戴', '贾', '田', '堵', '储',
            '卢', '杜', '胡', '南宫', '欧阳', '夏侯', '诸葛', '皇甫',
            '司马', '公孙', '慕容', '长孙', '司徒', '轩辕', '令狐',
            '宇文', '司空', '鲜于', '闾丘', '东方', '子车', '呼延',
            '赫连', '司寇', '浦', '尚', '农', '温', '别', '庄', '晏',
            '柴', '瞿', '阎', '充', '慕', '连', '茹', '习', '宦',
            '艾', '鱼', '容', '向', '古', '易', '慎', '戈', '廖',
            '庾', '终', '暨', '居', '衡', '步', '都', '耿', '满',
            '弘', '匡', '文', '国', '寇', '广', '禄', '阙', '东',
            '欧', '殳', '沃', '利', '蔚', '越', '夔', '隆', '师',
            '巩', '厍', '聂', '晁', '勾', '敖', '融', '冷', '訾',
            '辛', '阚', '那', '简', '饶', '空', '曾', '毋', '沙',
            '乜', '养', '鞠', '须', '丰', '巢', '关', '蒯', '相',
            '查', '后', '荆', '红', '游', '竺', '权', '逯', '盖',
            '益', '桓', '公', '万', '俟', '司空'];
        $names = ['王', '李', '张', '刘', '陈', '杨', '黄', '赵', '周', '吴', '徐', '孙', '胡', '朱', '高', '林', '何', '郭', '马', '罗','伟', '芳', '娜', '秀英', '敏', '静', '丽', '强', '磊', '军', '洋', '勇', '艳', '杰', '娟', '涛', '明', '超', '秀兰', '霞', '华', '国庆', '建华', '建国', '亮', '建军', '建平', '建农', '建新', '建业', '建英', '建政', '瑞', '建民', '建勇', '建珍', '婷', '建峰', '建芳', '建红', '建华', '建宏', '建辉', '建华', '建杰', '建军', '建民', '建宁', '建平', '建强', '建文', '建新', '建业', '建英', '建章', '建中', '建忠', '建宇', '建政', '建州'];


        // 随机生成姓名
        $name = $surnames[mt_rand(0, count($surnames) - 1)] . $names[mt_rand(0, count($names) - 1)];

        // 返回姓名
        return $name;
    }

    private function generateIdNumber()
    {
        // 生成一个随机的身份证号码
        $region = ['1101', '1201', '1301', '1401', '1501'];
        $year = mt_rand(1970, 2000);
        $month = str_pad(mt_rand(1, 12), 2, '0', STR_PAD_LEFT);
        $day = str_pad(mt_rand(1, 28), 2, '0', STR_PAD_LEFT); $suffix = str_pad(mt_rand(1, 9999), 4, '0', STR_PAD_LEFT); $id_number = $region[mt_rand(0, count($region) - 1)] . $year . $month . $day . $suffix; return $id_number;
    }
    private function generatePhoneNumber()
    {
        // 生成一个随机的手机号码
        $prefix = ['130', '131', '132', '133', '134', '135', '136', '137', '138', '139', '150', '151', '152', '153', '154', '155', '156', '157', '158', '159', '170', '176', '177', '178', '180', '181', '182', '183', '184', '185', '186', '187', '188', '189'];
        $number = $prefix[mt_rand(0, count($prefix) - 1)] . str_pad(mt_rand(0, 99999999), 8, '0', STR_PAD_LEFT);
        return $number;
    }
    private function getRandChar($length){
        // 随机生成要求位数个字符
        $str = null;
        $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";//大小写字母以及数字
        $max = strlen($strPol)-1;
   
        for($i=0;$i<$length;$i++){
            $str.=$strPol[rand(0,$max)];
        }
        return $str;
    }
}


上一篇: 用ThinkPHP6,写一个生成一个3-10个汉字的昵称,不要生僻字,需要是常用字,并且有含义,是一个连贯的句子或者词组