今天给大家分享一个比较好玩的东西估计纯代码。业务场景是这个样子的
大Boss:KingYiFan去给我生成50W条用户数据,投资人要看。数据看起来不能那么假,我说爬虫爬可以不,我不管你自己去想想办法。

臣妾做不到啊。这也太难了吧。怎么办。。突然辞职在脑子里打转。看了看钱包,呵呵一笑。我能做出来。。

file

我拿出来我珍藏多年的绝世代码。我本想着可以用爬虫解决的,可是我爬虫技术太low。有时间咱们一起学爬虫哈。

file

来给大家分享我珍藏多年的随机生成数据的绝世代码 KingYiFan声明: 代码来自网络,非原创 由KingYiFan进行整理并且发布。如有侵权,请联系我。

第一个先从生成中国人名字开始吧:

代码如下:

package cn.cnbuilder.utils.random;

/**
 * 随机生成中文姓名
 * 代码源于网络 由kingYiFan整理  create2019/05/24
 */
public class NameRandom {
  
  //百家姓
    private static String surname = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘缪干解应宗宣丁贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊於惠甄魏加封芮羿储靳汲邴糜松井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘姜詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲台从鄂索咸籍赖卓蔺屠蒙池乔阴郁胥能苍双闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍却璩桑桂濮牛寿通边扈燕冀郏浦尚农温别庄晏柴瞿阎充慕连茹习宦艾鱼容向古易慎戈廖庚终暨居衡步都耿满弘匡国文寇广禄阙东殴殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空曾毋沙乜养鞠须丰巢关蒯相查后江红游竺权逯盖益桓公万俟司马上官欧阳夏侯诸葛闻人东方赫连皇甫尉迟公羊澹台公冶宗政濮阳淳于仲孙太叔申屠公孙乐正轩辕令狐钟离闾丘长孙慕容鲜于宇文司徒司空亓官司寇仉督子车颛孙端木巫马公西漆雕乐正壤驷公良拓拔夹谷宰父谷粱晋楚阎法汝鄢涂钦段干百里东郭南门呼延归海羊舌微生岳帅缑亢况后有琴梁丘左丘东门西门商牟佘佴伯赏南宫墨哈谯笪年爱阳佟";
  
  //女生名
    private static String girlName = "秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽";
  
  //男生名
    private static String boyName = "伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘";

    /**
     * 生成中文名称
     *
     * @return
     */
    public static String getChineseName() {
        /**
         * 生成姓名的男还是女。
         */
        String name_sex = "";

        int index = getNum(0, surname.length() - 1);
        String first = surname.substring(index, index + 1);
        int sex = getNum(0, 1);
        String str = boyName;
        int length = boyName.length();
        if (sex == 0) {
            str = girlName;
            length = girlName.length();
            name_sex = "女";
        } else {
            name_sex = "男";
        }
        index = getNum(0, length - 1);
        String second = str.substring(index, index + 1);
        int hasThird = getNum(0, 1);
        String third = "";
        if (hasThird == 1) {
            index = getNum(0, length - 1);
            third = str.substring(index, index + 1);
        }
        return name_sex + ":" + first + second + third;
    }

    public static int getNum(int start, int end) {
        return (int) (Math.random() * (end - start + 1) + start);
    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            String chineseName = getChineseName();
            System.out.println(chineseName);
        }
    }
}

有没有感觉名字生成挺真实的,姓是百家姓 男名字和女名字随机组成,是不是一级棒,感谢作者找的男名和女名 我们一起看看效果:

file

名字生成完毕了,现在生成手机号吧:


具体代码如下:

package cn.cnbuilder.utils.random;

/**
 * 随机生成手机号
 * 代码源于网络 由kingYiFan整理  create2019/05/24
 */
public class PhoneRandom {
    /**
     * 返回手机号码
     */
    private static String[] telFirst = "134,135,136,137,138,139,150,151,152,157,158,159,130,131,132,155,156,133,153".split(",");

    public static int getNum(int start, int end) {
        return (int) (Math.random() * (end - start + 1) + start);
    }

    public static String getTel() {
        int index = getNum(0, telFirst.length - 1);
        String first = telFirst[index];
        String second = String.valueOf(getNum(1, 888) + 10000).substring(1);
        String third = String.valueOf(getNum(1, 9100) + 10000).substring(1);
        return first + second + third;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) { ;
            String tel = getTel();
            System.out.println(tel);
        }
    }
}

我们看一下测试结果:

file

手机号生成完了,我们随机生成一些邮箱。

具体代码如下:

package cn.cnbuilder.utils.random;

/**
 * 随机邮箱
 * 代码源于网络 由kingYiFan整理  create2019/05/24
 */
public class EmailRandom {

    private static final String[] email_suffix = "@gmail.com,@yahoo.com,@msn.com,@hotmail.com,@aol.com,@ask.com,@live.com,@qq.com,@0355.net,@163.com,@163.net,@263.net,@3721.net,@yeah.net,@googlemail.com,@126.com,@sina.com,@sohu.com,@yahoo.com.cn".split(",");
    public static String base = "abcdefghijklmnopqrstuvwxyz0123456789";

    public static int getNum(int start, int end) {
        return (int) (Math.random() * (end - start + 1) + start);
    }

    /**
     * 返回Email
     *
     * @param lMin 最小长度
     * @param lMax 最大长度
     * @return
     */
    public static String getEmail(int lMin, int lMax) {
        int length = getNum(lMin, lMax);
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = (int) (Math.random() * base.length());
            sb.append(base.charAt(number));
        }
        sb.append(email_suffix[(int) (Math.random() * email_suffix.length)]);
        return sb.toString();
    }

    //  代码源于网络 由kingYiFan整理  create2019/05/24
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            String email = getEmail(1, i);
            System.out.println(email);
        }
    }
}

随机邮箱测试结果:

file

邮箱生成完了,我们在随机生成一些ip地址:

具体代码如下:

package cn.cnbuilder.utils.random;

import java.util.Random;

/**
 * 随机ip地址
 * 代码源于网络 由kingYiFan整理  create2019/05/24
 */
public class ipRandom {
    public static String getRandomIp() {

        // ip范围
        int[][] range = {{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
        };

        Random rdint = new Random();
        int index = rdint.nextInt(10);
        String ip = num2ip(range[index][0] + new Random().nextInt(range[index][1] - range[index][0]));
        return ip;
    }

    /*
     * 将十进制转换成IP地址
     */
    public static String num2ip(int ip) {
        int[] b = new int[4];
        String x = "";
        b[0] = (int) ((ip >> 24) & 0xff);
        b[1] = (int) ((ip >> 16) & 0xff);
        b[2] = (int) ((ip >> 8) & 0xff);
        b[3] = (int) (ip & 0xff);
        x = Integer.toString(b[0]) + "." + Integer.toString(b[1]) + "." + Integer.toString(b[2]) + "." + Integer.toString(b[3]);

        return x;
    }

    public static void main(String[] args) {
        int count = 100000;
        for (int i = 0; i < count; i++) {
            String randomIp = getRandomIp();
            System.err.println(randomIp);
        }

    }

}

生成ip地址演示成果如下:

file

我们ip地址生成完了,我们再来生成一下根据范围生成随机经纬度的方法:

具体代码如下:

package cn.cnbuilder.utils.random;

import java.math.BigDecimal;
import java.util.Random;

/**
 * 随机生成经纬度
 * 代码源于网络 由kingYiFan整理  create2019/05/24
 */
public class LonLatRandom {
    /**
     * @param MinLon:最新经度 MaxLon: 最大经度   MinLat:最新纬度   MaxLat:最大纬度    type:设置返回经度还是纬度
     * @return
     * @throws
     * @Title: randomLonLat
     * @Description: 在矩形内随机生成经纬度
     */
    public static String randomLonLat(double MinLon, double MaxLon, double MinLat, double MaxLat) {
        Random random = new Random();
        BigDecimal db = new BigDecimal(Math.random() * (MaxLon - MinLon) + MinLon);
        String lon = db.setScale(6, BigDecimal.ROUND_HALF_UP).toString();// 小数后6位
        db = new BigDecimal(Math.random() * (MaxLat - MinLat) + MinLat);
        String lat = db.setScale(6, BigDecimal.ROUND_HALF_UP).toString();

        return lon + "," + lat;
    }

    // 代码源于网络 由kingYiFan整理  create2019/05/24
    public static void main(String[] args) {
        String s = randomLonLat(112.1212, 134.1212, 43.12, 65.123);
        System.out.println(s);
    }

}

随机经纬度演示成果: file

随机经纬度生成完了。我们再来随机生成一些MAC地址:

有没有不知道MAC地址是什么意思的小伙伴,我先给大家甩一个关于MAC百度百科:

file

随机生成MAC地址 具体代码如下:

package cn.cnbuilder.utils.random;

import java.util.Random;

/**
 * 随机mac地址
 * 代码源于网络 由kingYiFan整理  create2019/05/24
 */
public class MacRandom {
    private static String SEPARATOR_OF_MAC = ":";

    public static String randomMac4Qemu() {
        Random random = new Random();
        String[] mac = {String.format("%02x", 0x52), String.format("%02x", 0x54), String.format("%02x", 0x00), String.format("%02x", random.nextInt(0xff)), String.format("%02x", random.nextInt(0xff)), String.format("%02x", random.nextInt(0xff))};
        return String.join(SEPARATOR_OF_MAC, mac);
    }

    public static void main(String[] args) {

        System.out.println(randomMac4Qemu());
    }
}

随机mac地址测试结果:

file

随机mac生成完了 。

file

重头戏:根据〖中华人民共和国国家标准 GB 11643-1999〗规则随机生成身份证号码。

由于中国区县太多了 一下子加载出啦会很慢 会出现一下效果:

file

上面的空白 不是空格 不是空格 不是空格 是加载不出来的截图。。

给你们普及一下知识(中国区县截止到2018年有2851多个):

file

具体随机生成身份证号码 代码如下:

package cn.cnbuilder.utils.random;

import javafx.beans.binding.Bindings;

import java.util.HashMap;
import java.util.Map;

/**
 * 地区编码集合
 * 代码源于网络 由kingYiFan整理  create2019/05/24
 */
public class AreaCodeList {

    //创建一个map存放编码
     static final Map<String, Integer> areaCode = new HashMap<String, Integer>();

    static {
        AreaCodeList.areaCode.put("北京市", 110000);
        AreaCodeList.areaCode.put("江都市", 321088);
        AreaCodeList.areaCode.put("镇江市", 321100);
        AreaCodeList.areaCode.put("市辖区", 321101);
        AreaCodeList.areaCode.put("京口区", 321102);
        AreaCodeList.areaCode.put("润州区", 321111);
        AreaCodeList.areaCode.put("丹徒区", 321112);
        AreaCodeList.areaCode.put("丹阳市", 321181);
        AreaCodeList.areaCode.put("扬中市", 321182);
        AreaCodeList.areaCode.put("句容市", 321183);
        AreaCodeList.areaCode.put("泰州市", 321200);
        AreaCodeList.areaCode.put("市辖区", 321201);
        AreaCodeList.areaCode.put("海陵区", 321202);
        AreaCodeList.areaCode.put("高港区", 321203);
        AreaCodeList.areaCode.put("兴化市", 321281);
        AreaCodeList.areaCode.put("靖江市", 321282);
        AreaCodeList.areaCode.put("泰兴市", 321283);
        AreaCodeList.areaCode.put("姜堰市", 321284);
        AreaCodeList.areaCode.put("宿迁市", 321300);
        AreaCodeList.areaCode.put("市辖区", 321301);
        AreaCodeList.areaCode.put("万宁市", 469006);
        AreaCodeList.areaCode.put("东方市", 469007);
        AreaCodeList.areaCode.put("定安县", 469021);
        AreaCodeList.areaCode.put("屯昌县", 469022);
        AreaCodeList.areaCode.put("澄迈县", 469023);
        AreaCodeList.areaCode.put("临高县", 469024);
        AreaCodeList.areaCode.put("白沙黎族自治县", 469025);
        AreaCodeList.areaCode.put("昌江黎族自治县", 469026);
        AreaCodeList.areaCode.put("乐东黎族自治县", 469027);
        AreaCodeList.areaCode.put("陵水黎族自治县", 469028);
        AreaCodeList.areaCode.put("保亭黎族苗族自治县", 469029);
        AreaCodeList.areaCode.put("琼中黎族苗族自治县", 469030);
        AreaCodeList.areaCode.put("西沙群岛", 469031);
        AreaCodeList.areaCode.put("南沙群岛", 469032);
        AreaCodeList.areaCode.put("中沙群岛的岛礁及其海域", 469033);
        AreaCodeList.areaCode.put("重庆市", 500000);
        AreaCodeList.areaCode.put("市辖区", 500100);
        AreaCodeList.areaCode.put("万州区", 500101);
        AreaCodeList.areaCode.put("涪陵区", 500102);
        AreaCodeList.areaCode.put("渝中区", 500103);
        AreaCodeList.areaCode.put("大渡口区", 500104);
        AreaCodeList.areaCode.put("江北区", 500105);
        AreaCodeList.areaCode.put("沙坪坝区", 500106);
        AreaCodeList.areaCode.put("九龙坡区", 500107);
        AreaCodeList.areaCode.put("南岸区", 500108);
        AreaCodeList.areaCode.put("北碚区", 500109);
        AreaCodeList.areaCode.put("万盛区", 500110);
        AreaCodeList.areaCode.put("双桥区", 500111);
        AreaCodeList.areaCode.put("渝北区", 500112);
        AreaCodeList.areaCode.put("巴南区", 500113);
        AreaCodeList.areaCode.put("澳门特别行政区", 820000);
         。。。。。(其他区县编码见最下面百度云盘链接)
 }

}

//生成身份证工具类
package cn.cnbuilder.utils.random;

import java.util.*;

/**
 * 随机生成身份证18位号码工具类
 * <p>
 * 居民身份证号码是根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,
 * 由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。居民身份证是国家法定的证明公民个人身份的有效证件。
 *  身份证号码构成:
 *   1 地址码
 *   (身份证前六位)表示编码对象常住户口所在县(市、镇、区)的行政区划代码。
 *   2 生日期码
 *   (身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。
 *   3 顺序码
 *   (身份证第十五位到十七位)为同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。(随机生成)
 *   4 校验码
 *   (身份证最后一位)是根据前面十七位数字码由号码编制单位按统一的公式计算出来的,
 * 如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,
 * 并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准
 * 代码源于网络 由kingYiFan整理  create2019/05/24
 */
public class IdCardRandom extends AreaCodeList {

    /**
     * 生成随机地区编码
     *
     * @return
     */
    private int randomAreaCode() {
        int index = (int) (Math.random() * super.areaCode.size());
        Collection<Integer> values = super.areaCode.values();
        Iterator<Integer> it = values.iterator();
        int i = 0;
        int code = 0;
        while (i < index && it.hasNext()) {
            i++;
            code = it.next();
        }
        return code;
    }

    /**
     * 随机出生日期
     */
    private String randomBirthday() {
        Calendar birthday = Calendar.getInstance();
        birthday.set(Calendar.YEAR, (int) (Math.random() * 60) + 1950);
        birthday.set(Calendar.MONTH, (int) (Math.random() * 12));
        birthday.set(Calendar.DATE, (int) (Math.random() * 31));

        StringBuilder builder = new StringBuilder();
        builder.append(birthday.get(Calendar.YEAR));
        long month = birthday.get(Calendar.MONTH) + 1;
        if (month < 10) {
            builder.append("0");
        }
        builder.append(month);
        long date = birthday.get(Calendar.DATE);
        if (date < 10) {
            builder.append("0");
        }
        builder.append(date);
        return builder.toString();
    }

    /**
     * 随机产生3位
     *
     * @return
     */
    private String randomCode() {
        int code = (int) (Math.random() * 1000);
        if (code < 10) {
            return "00" + code;
        } else if (code < 100) {
            return "0" + code;
        } else {
            return "" + code;
        }
    }

    /**
     * 生成最后一位数字
     *
     * @param chars
     * @return
     */
    private char calcTrailingNumber(char[] chars) {
        if (chars.length < 17) {
            return ' ';
        }
        int[] c = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
        char[] r = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
        int[] n = new int[17];
        int result = 0;
        for (int i = 0; i < n.length; i++) {
            n[i] = Integer.parseInt(chars[i] + "");
        }
        for (int i = 0; i < n.length; i++) {
            result += c[i] * n[i];
        }
        return r[result % 11];
    }

    /**
     * 生成身份证
     *
     * @return
     */
    public String generate() {
        StringBuilder generater = new StringBuilder();
        generater.append(this.randomAreaCode());
        generater.append(this.randomBirthday());
        generater.append(this.randomCode());
        generater.append(this.calcTrailingNumber(generater.toString().toCharArray()));
        return generater.toString();
    }
   public static void main(String[] args) {
        IdCardRandom g = new IdCardRandom();
        String generate = g.generate();
        System.out.println(generate);
    }

}

身份证随机生成演示结果:

file

终、、


还有一些随机生成QQ的,随机生成微信号的,我觉得没有意义就没有分享,

给你们说一下方案:

QQ号:取随机数:10001-9999999999

微信号:随机生成字符串。

至于随机地址:我还在整理,网上现在有一些现成的,不太友好,我终极目标是弄成省市区连着生成的地址。等我整理完在分享给大家哈。

以上就是随机生成姓名、随机生成邮箱、随机生成ip地址、随机生成MAC地址、随机生成手机号、随机生成经纬度、随机生成身份证号工具类代码。有什么问题可以联系我哈。

由于区县太多,网络卡顿问题:以上代码

下载链接:https://pan.baidu.com/s/1UwYDIl1CVLdFcAWtQd4BIQ

提取码:e4yp

鼓励作者写出更好的技术文档,就请我喝一瓶哇哈哈哈哈哈哈哈。。你们的赞助决定我更新的速度哦!

微信:

支付宝:


感谢一路支持我的人。。。。。

Love me and hold me
QQ:69673804(16年老号)
EMAIL:itw@tom.com
友链交换
如果有兴趣和本博客交换友链的话,请按照下面的格式在评论区进行评论,我会尽快添加上你的链接。

网站名称:KingYiFan’S Blog
网站地址:http://blog.cnbuilder.cn
网站描述:年少是你未醒的梦话,风华是燃烬的彼岸花。
网站Logo/头像: [头像地址](https://blog.cnbuilder.cn/upload/2018/7/avatar20180720144536200.jpg)