有时候需要造大量数据进行测试,或者是用于学习,当然了这个工具类的目的就是为了后面测试easyExcel与 easyPoi 两者性能准备的
需要引入一个 hutool工具类
hutool 工具类在此工具类上的影响并不多,好像就一个随机生成年龄的地方,才用到了,如果不想引入可以直接删除即可
cn.hutool
hutool-all
5.8.18
随机生成工具类
import cn.hutool.core.util.RandomUtil;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* @Description: 随机生成工具类
* ================ 随机生成身份证号 =============
* getIdNo(String birth,boolean male) 参数 birth 表示 起始年月 参数 male 表示是否为男性
* getIdNo(boolean male) 参数 male 表示是否为男性
*
* ================ 随机获取湖北省的 各个市下面的县、市、镇 =============
* region() 返回的是一个 Map 市 : city 区/镇/乡 district
*
* ================ 随机获取年龄 =============
* age() 返回的结果是 11-99 岁之间的
*
* ================ 获取随机生成的中文姓名 =============
* getRandomChineseName()
*
* ================ 随机生成电话号码 =============
* phone()
*
* ================ 随机生成邮箱 =============
* genEmail
*
* ================ 随机获取图片的链接 =============
* image
* @author: TuiMao
* @date 2023-05-13 0:40
*/
public class Random {
/**
* 中华姓氏(按照使用人数由多到少排序)
*/
public static final String[] LAST_NAME = new String[]{
"赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈", "褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤",
"许", "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏", "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水",
"窦", "章", "云", "苏", "潘", "葛", "奚", "范", "彭", "郎", "鲁", "韦", "昌", "马", "苗", "凤", "花", "方", "俞",
"任", "袁", "柳", "酆", "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺", "倪", "汤", "滕", "殷", "罗", "毕",
"郝", "邬", "安", "常", "于", "时", "傅", "皮", "卞", "齐", "康", "伍", "余", "元", "卜", "顾", "孟", "平", "黄",
"和", "穆", "萧", "尹", "姚", "邵", "湛", "汪", "祁", "毛", "禹", "狄", "米", "贝", "明", "臧", "计", "伏", "成",
"戴", "谈", "宋", "茅", "庞", "熊", "纪", "舒", "屈", "项", "祝", "董", "梁", "杜", "阮", "蓝", "闵", "席", "季",
"麻", "强", "贾", "路", "娄", "危", "江", "童", "颜", "郭", "梅", "盛", "林", "***", "钟", "徐", "邱", "骆", "高",
"夏", "蔡", "田", "樊", "胡", "凌", "霍", "虞", "万", "支", "柯", "昝", "管", "卢", "莫", "经", "房", "裘", "缪",
"干", "解", "应", "宗", "丁", "宣", "贲", "邓", "郁", "单", "杭", "洪", "包", "诸", "左", "石", "崔", "吉", "钮",
"龚", "程", "嵇", "邢", "滑", "裴", "陆", "荣", "翁", "荀", "羊", "於", "惠", "甄", "曲", "家", "封", "芮", "羿",
"储", "靳", "汲", "邴", "糜", "松", "井", "段", "富", "巫", "乌", "焦", "巴", "弓", "牧", "隗", "山", "谷", "车",
"侯", "宓", "蓬", "全", "郗", "班", "仰", "秋", "仲", "伊", "宫", "宁", "仇", "栾", "暴", "甘", "钭", "厉", "戎",
"祖", "武", "符", "刘", "景", "詹", "束", "龙", "叶", "幸", "司", "韶", "郜", "黎", "蓟", "薄", "印", "宿", "白",
"怀", "蒲", "台", "从", "鄂", "索", "咸", "籍", "赖", "卓", "蔺", "屠", "蒙", "池", "乔", "阴", "欎", "胥", "能",
"苍", "双", "闻", "莘", "党", "翟", "谭", "贡", "劳", "逄", "姬", "申", "扶", "堵", "冉", "宰", "郦", "雍", "郤",
"璩", "桑", "桂", "濮", "牛", "寿", "通", "边", "扈", "燕", "冀", "郏", "浦", "尚", "农", "温", "别", "庄", "晏",
"柴", "瞿", "阎", "充", "慕", "连", "茹", "习", "宦", "艾", "鱼", "容", "向", "古", "易", "慎", "戈", "廖", "庾",
"终", "暨", "居", "衡", "步", "都", "耿", "满", "弘", "匡", "国", "文", "寇", "广", "禄", "阙", "东", "殴", "殳",
"沃", "利", "蔚", "越", "夔", "隆", "师", "巩", "厍", "聂", "晁", "勾", "敖", "融", "冷", "訾", "辛", "阚", "那",
"简", "饶", "空", "曾", "毋", "沙", "乜", "养", "鞠", "须", "丰", "巢", "关", "蒯", "相", "查", "后", "荆", "红",
"游", "竺", "权", "逯", "盖", "益", "桓", "公", "万俟", "司马", "上官", "欧阳", "夏侯", "诸葛", "闻人", "东方", "赫连",
"皇甫", "尉迟", "公羊", "澹台", "公冶", "宗政", "濮阳", "淳于", "单于", "太叔", "申屠", "公孙", "仲孙", "轩辕", "令狐",
"钟离", "宇文", "长孙", "慕容", "鲜于", "闾丘", "司徒", "司空", "亓官", "司寇", "仉", "督", "子车", "颛孙", "端木", "巫马",
"公西", "漆雕", "乐正", "壤驷", "公良", "拓跋", "夹谷", "宰父", "谷梁", "晋", "楚", "闫", "法", "汝", "鄢", "涂", "钦",
"段干", "百里", "东郭", "南", "门", "呼延", "归海", "羊舌", "微生", "岳", "帅", "缑", "亢", "况", "郈", "有", "琴", "梁丘",
"左丘", "东门", "西门", "商", "牟", "佘", "佴", "伯", "赏", "南宫", "墨", "哈", "谯", "笪", "年", "爱", "阳", "佟", "第五",
"言", "福", "百", "姓"
};
/**
* 各姓氏的权重(数值越大表明使用频率越高)
* A B C D E F
* |--------------------|---------------|----------|-----|---|-|
*/
public static final int[] LAST_NAME_WEIGHTS = new int[]{
505, 504, 503, 502, 501, 500, 499, 498, 497, 496, 495, 494, 493, 492, 491, 490, 489, 488, 487, 486, 485,
484, 483, 482, 481, 480, 479, 478, 477, 476, 475, 474, 473, 472, 471, 470, 469, 468, 467, 466, 465, 464,
463, 462, 461, 460, 459, 458, 457, 456, 455, 454, 453, 452, 451, 450, 449, 448, 447, 446, 445, 444, 443,
442, 441, 440, 439, 438, 437, 436, 435, 434, 433, 432, 431, 430, 429, 428, 427, 426, 425, 424, 423, 422,
421, 420, 419, 418, 417, 416, 415, 414, 413, 412, 411, 410, 409, 408, 407, 406, 405, 404, 403, 402, 401,
400, 399, 398, 397, 396, 395, 394, 393, 392, 391, 390, 389, 388, 387, 386, 385, 384, 383, 382, 381, 380,
379, 378, 377, 376, 375, 374, 373, 372, 371, 370, 369, 368, 367, 366, 365, 364, 363, 362, 361, 360, 359,
358, 357, 356, 355, 354, 353, 352, 351, 350, 349, 348, 347, 346, 345, 344, 343, 342, 341, 340, 339, 338,
337, 336, 335, 334, 333, 332, 331, 330, 329, 328, 327, 326, 325, 324, 323, 322, 321, 320, 319, 318, 317,
316, 315, 314, 313, 312, 311, 310, 309, 308, 307, 306, 305, 304, 303, 302, 301, 300, 299, 298, 297, 296,
295, 294, 293, 292, 291, 290, 289, 288, 287, 286, 285, 284, 283, 282, 281, 280, 279, 278, 277, 276, 275,
274, 273, 272, 271, 270, 269, 268, 267, 266, 265, 264, 263, 262, 261, 260, 259, 258, 257, 256, 255, 254,
253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240, 239, 238, 237, 236, 235, 234, 233,
232, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 219, 218, 217, 216, 215, 214, 213, 212,
211, 210, 209, 208, 207, 206, 205, 204, 203, 202, 201, 200, 199, 198, 197, 196, 195, 194, 193, 192, 191,
190, 189, 188, 187, 186, 185, 184, 183, 182, 181, 180, 179, 178, 177, 176, 175, 174, 173, 172, 171, 170,
169, 168, 167, 166, 165, 164, 163, 162, 161, 160, 159, 158, 157, 156, 155, 154, 153, 152, 151, 150, 149,
148, 147, 146, 145, 144, 143, 142, 141, 140, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128,
127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107,
106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82,
81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55,
54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28,
27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
};
/**
* @Description: 随机获取湖北省的各个市下面包含的各个县
*
只针对 湖北省
* 市 city
* 区/镇/乡 district
* @Author: TuiMao
* @Date: 2023-05-13 0:41
* @return: java.util.List>
**/
public Map region(){
ArrayList listCity = new ArrayList();
listCity.add("武汉市");
listCity.add("襄阳市");
listCity.add("宜昌市");
listCity.add("荆州市");
listCity.add("孝感市");
listCity.add("黄冈市");
listCity.add("十堰市");
listCity.add("荆门市");
listCity.add("咸宁市");
listCity.add("黄石市");
listCity.add("随州市");
listCity.add("恩施州");
listCity.add("鄂州市");
ArrayList listWuhan = new ArrayList();
listWuhan.add("武昌区");
listWuhan.add("江汉区");
listWuhan.add("汉阳区");
listWuhan.add("蔡甸区");
listWuhan.add("汉南区");
listWuhan.add("黄陂区");
listWuhan.add("东西湖区");
listWuhan.add("青山区");
listWuhan.add("江夏区");
listWuhan.add("新洲区");
listWuhan.add("洪山区");
listWuhan.add(" 硚口区");
listWuhan.add("江岸区");
ArrayList listXiangYang = new ArrayList();
listXiangYang.add("樊城区");
listXiangYang.add("襄城区");
listXiangYang.add("襄州区");
listXiangYang.add("谷城district");
listXiangYang.add("保康district");
listXiangYang.add("南漳district");
listXiangYang.add("宜城市");
listXiangYang.add("枣阳市");
listXiangYang.add("老河口市");
ArrayList listYiChang = new ArrayList();
listYiChang.add("夷陵区");
listYiChang.add("点军区");
listYiChang.add("猇亭区");
listYiChang.add("伍家岗区");
listYiChang.add("西陵区");
listYiChang.add("远安district");
listYiChang.add("兴山district");
listYiChang.add("秭归district");
listYiChang.add("长阳土家族自治district");
listYiChang.add("五峰土家族自治district");
listYiChang.add("当阳市");
listYiChang.add("宜都市");
listYiChang.add("枝江市");
ArrayList listJingZhou = new ArrayList();
listJingZhou.add("荆州区");
listJingZhou.add("沙市区");
listJingZhou.add("江陵district");
listJingZhou.add("公安district");
listJingZhou.add("监利市");
listJingZhou.add("石首市");
listJingZhou.add("松滋市");
listJingZhou.add("洪湖市");
ArrayList listXiaoGang = new ArrayList();
listXiaoGang.add("孝南区");
listXiaoGang.add("大悟district");
listXiaoGang.add("孝昌district");
listXiaoGang.add("云梦district");
listXiaoGang.add("安陆市");
listXiaoGang.add("应城市");
listXiaoGang.add("汉川市");
ArrayList listHuangGang = new ArrayList();
listHuangGang.add("黄州区");
listHuangGang.add("红安district");
listHuangGang.add("团凤district");
listHuangGang.add("浠水district");
listHuangGang.add("蕲春district");
listHuangGang.add("黄梅district");
listHuangGang.add("英山district");
listHuangGang.add("罗田district");
listHuangGang.add("麻城市");
listHuangGang.add("武穴市");
ArrayList listShiYang = new ArrayList();
listShiYang.add("张湾区");
listShiYang.add("郧阳区");
listShiYang.add("茅箭区");
listShiYang.add("房district");
listShiYang.add("竹山district");
listShiYang.add("郧西district");
listShiYang.add("竹溪district");
listShiYang.add("丹江口市");
ArrayList listJingMeng = new ArrayList();
listJingMeng.add("东宝区");
listJingMeng.add("掇刀区");
listJingMeng.add("沙洋district");
listJingMeng.add("钟祥市");
listJingMeng.add("京山市");
ArrayList listXiangNing = new ArrayList();
listXiangNing.add("咸安区");
listXiangNing.add("嘉鱼district");
listXiangNing.add("通城district");
listXiangNing.add("通山district");
listXiangNing.add("崇阳district");
listXiangNing.add("赤壁市");
ArrayList listHuangShi = new ArrayList();
listHuangShi.add("黄石港区");
listHuangShi.add("西塞山区");
listHuangShi.add("下陆区");
listHuangShi.add("铁山区");
listHuangShi.add("阳新district");
listHuangShi.add("大冶市");
ArrayList listSuiZhou = new ArrayList();
listSuiZhou.add("曾都区");
listSuiZhou.add("随district");
listSuiZhou.add("广水市");
ArrayList listEnShi = new ArrayList();
listEnShi.add("恩施市");
listEnShi.add("利川市");
listEnShi.add("巴东district");
listEnShi.add("鹤峰district");
listEnShi.add("来凤district");
listEnShi.add("建始district");
listEnShi.add("宣恩district");
listEnShi.add("咸丰district");
ArrayList listEnZhou = new ArrayList();
listEnZhou.add("梁子湖区");
listEnZhou.add("华容区");
listEnZhou.add("鄂城区");
Map map = new HashMap();
for (int i = 0; i E randomDecisionWithWeight(E[] prizePool, int[] weightPool) {
if (prizePool.length == 0 || prizePool.length != weightPool.length) {
throw new IllegalArgumentException();
}
/*
* 奖品池、奖品权重:
*
* A B C D
* |-----|-------|---------------|-------------------------------|
* 1/15 2/15 4/15 8/15
*
* 生成一个[0,15)区间内的随机数x,根据x所处的子区间决定抽取到的奖品:
* x
* |----------------------------------|
*/
// 计算总权重,确定随机数生成范围
int weightSum = 0;
for (int weight : weightPool) {
if (weight = 91 && tmp = 91 && tmp = 58 && tmp 18位身份证验证
* 根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
* 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
* 第十八位数字(校验码)的计算方法为:
* 1.将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
* 2.将这17位数字和系数相乘的结果相加。
* 3.用加出来和除以11,看余数是多少?
* 4.余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。
* 5.通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。
*/
private static char calcTrailingNumber(StringBuilder sb) {
int[] n = new int[17];
int result = 0;
for (int i = 0; i = 100){
sb.append(value);
}else if(value >= 10){
sb.append('0').append(value);
}else{
sb.append("00").append(value);
}
sb.append(calcTrailingNumber(sb));
return sb.toString();
}
private static final int[] calcC = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
private static final char[] calcR = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
/**
* @Description: 随机获取图片的链接
* @author: TuiMao~
* @date 2023-05-13 11:52
* @return String
*/
public static String image(){
ArrayList list = new ArrayList();
list.add("https://img2023.cnblogs.com/blog/2611649/202304/2611649-20230409201119619-1454421565.png");
list.add("https://img2023.cnblogs.com/blog/2611649/202304/2611649-20230409201222224-766991510.png");
list.add("https://img2023.cnblogs.com/blog/2611649/202303/2611649-20230316221325267-959089891.png");
list.add("https://img2023.cnblogs.com/blog/2611649/202303/2611649-20230316221404421-1728699697.png");
list.add("https://img2023.cnblogs.com/blog/2611649/202303/2611649-20230316221417777-1987851283.png");
list.add("https://img2023.cnblogs.com/blog/2611649/202303/2611649-20230316221430210-1523747333.png");
java.util.Random random = new java.util.Random();
int i = random.nextInt(list.size());
return list.get(i);
}
public static void main(String[] args) {
for (int i = 0; i
服务器租用托管,机房租用托管,主机租用托管,https://www.e1idc.com