一个java随机数据的工具类

获得随机数据工具类

在一些业务还有测试中可能需要一些有实际意义的测试数据,编写这些数据可能比较头大,这里写了一个随机数据的工具类,具有以下功能:

  1. 获得指定长度的随机大写、小写、数字字母
  2. 获得随机的性别
  3. 获得随机的中文姓氏
  4. 获得随机的中文姓氏
  5. 获得指定时间范围内的随机日期

public class RandomValue {
    /**  * 
     * @param ln     *            长度
     * @param type   *            1大写 2小写 3数字
     * @return
     */
    public static String getRandomChar(int ln, int type) {
        String result = "";
        Random rd = new Random();
        switch (type) {
        case 1:
            for (int i = 0; i < ln; i++) {
                result += (char) (rd.nextInt(26) + 65);
            }
            break;
        case 2:
            for (int i = 0; i < ln; i++) {
                result += (char) (rd.nextInt(26) + 97);
            }
            break;
        case 3:
            for (int i = 0; i < ln; i++) {
                result += rd.nextInt(10);
            }
            break;

        default:
            break;
        }
        return result;
    }

    /**
     * 使用区位码获得指定长度的随机汉字
     * @param ln 字符数量
     * @return
     */
    public static String getRandomSC(int ln) {
        String result="";
        String[] rBase = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
        Random random = new Random();
        for(int i=0;i// 生成第一位区码
        int r1 = random.nextInt(3) + 11;
        String str_r1 = rBase[r1];
        // 生成第二位区码
        int r2;
        if (r1 == 13) {
            r2 = random.nextInt(7);
        } else {
            r2 = random.nextInt(16);
        }
        String str_r2 = rBase[r2];
        // 生成第一位位码
        int r3 = random.nextInt(6) + 10;
        String str_r3 = rBase[r3];
        // 生成第二位位码
        int r4;
        if (r3 == 10) {
            r4 = random.nextInt(15) + 1;
        } else if (r3 == 15) {
            r4 = random.nextInt(15);
        } else {
            r4 = random.nextInt(16);
        }
        String str_r4 = rBase[r4];
        // 将生成的机内码转换为汉字
        byte[] bytes = new byte[2];
        // 将生成的区码保存到字节数组的第一个元素中
        String str_12 = str_r1 + str_r2;
        int tempLow = Integer.parseInt(str_12, 16);
        bytes[0] = (byte) tempLow;
        // 将生成的位码保存到字节数组的第二个元素中
        String str_34 = str_r3 + str_r4;
        int tempHigh = Integer.parseInt(str_34, 16);
        bytes[1] = (byte) tempHigh;
        result += new String(bytes);
        }
        return result;
    }

    /**
     * 获得随机的性别
     * @return
     */
    public static String getRandomSex(){
        Random random = new Random();
        String sex=random.nextBoolean()?"男":"女";
        return sex;     
    }

    /** 
     * @param beginDate 开始时间范围 yyyy-MM-dd
     * @param endDate  结束时间范围 yyyy-MM-dd
     * @return
     */
    public static Date randomDate(String beginDate,String  endDate ){  
        try {  
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
        Date start = format.parse(beginDate);//构造开始日期  
        Date end = format.parse(endDate);//构造结束日期  
        //getTime()表示返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。  
        if(start.getTime() >= end.getTime()){  
        return null;  
        }  
        long date = random(start.getTime(),end.getTime());  
        return new Date(date);  
        } catch (Exception e) { 
        e.printStackTrace();  
        }  
        return null;  
        }  

        private static long random(long begin,long end){ 
        long rtn = begin + (long)(Math.random() * (end - begin));  
        //如果返回的是开始时间和结束时间,则递归调用本函数查找随机值  
        if(rtn == begin || rtn == end){  
        return random(begin,end);  
        }  
        return rtn; 
        }  


        /**
         * 获得随机的中文性
         * @return
         */
        public static String getXingshi(){
        String xing="赵 钱 孙 李 周 吴 郑 王 冯 陈 楮 卫 蒋 沈 韩 杨 朱 秦 尤 许 何 吕 施 张 孔 曹 严 华 "
                    + "金 魏 陶 姜 戚 谢 邹 喻 柏 水 窦 章 云 苏 潘 葛 奚 范 彭 郎 鲁 韦 昌 马 苗 凤 花 方俞 任 "
                    + "袁 柳 酆 鲍 史 唐 费 廉 岑 薛 雷 贺 倪 汤 滕 殷 罗 毕 郝 邬 安 常 乐 于 时 傅 皮 卞 齐 康 "
                    + "伍 余 元 卜 顾 孟 平 黄 和 穆 萧 尹 姚 邵 湛 汪 祁 毛 禹 狄 米 贝 明 臧 计 伏 成 戴 谈 宋 "
                    + "茅 庞 熊 纪 舒 屈 项 祝 董 梁 杜 阮 蓝 闽 席 季 麻 强 贾 路 娄 危 江 童 颜 郭 梅 盛 林 刁 "
                    + "锺 徐 丘 骆 高 夏 蔡 田 樊 胡 凌 霍 虞 万 支 柯 昝 管 卢 莫 经 房 裘 缪 干 解 应 宗 丁 宣 "
                    + "贲 邓 郁 单 杭 洪 包 诸 左 石 崔 吉 钮 龚 程 嵇 邢 滑 裴 陆 荣 翁 荀 羊 於 惠 甄 麹 家 封 "
                    + "芮 羿 储 靳 汲 邴 糜 松 井 段 富 巫 乌 焦 巴 弓 牧 隗 山 谷 车 侯 宓 蓬 全 郗 班 仰 秋 仲 "
                    + "伊 宫宁 仇 栾 暴 甘 斜 厉 戎 祖 武 符 刘 景 詹 束 龙 叶 幸 司 韶 郜 黎 蓟 薄 印 宿 白 怀 "
                    + "蒲 邰 从 鄂 索 咸 籍 赖 卓 蔺 屠 蒙 池 乔 阴 郁 胥 能 苍 双 闻 莘 党 翟 谭 贡 劳 逄 姬 申 "
                    + "扶 堵 冉 宰 郦 雍 郤 璩 桑 桂 濮 牛 寿 通 边 扈 燕 冀 郏 浦 尚 农 温 别 庄 晏 柴 瞿 阎 充 "
                    + "慕 连 茹 习 宦 艾 鱼 容 向 古 易 慎 戈 廖 庾 终 暨 居 衡 步 都 耿 满 弘 匡 国 文 寇 广 禄 "
                    + "阙 东 欧 殳 沃 利 蔚 越 夔 隆 师 巩 厍 聂 晁 勾 敖 融 冷 訾 辛 阚 那 简 饶 空 曾 毋 沙 乜 "
                    + "养 鞠 须 丰 巢 关 蒯 相 查 后 荆 红 游 竺 权 逑 盖 益 桓 公 万俟 司马 上官 欧阳 夏侯 诸葛 "
                    + "闻人 东方 赫连 皇甫 尉迟 公羊 澹台 公冶 宗政 濮阳 淳于 单于 太叔 申屠 公孙 仲孙 轩辕 令狐 "
                    + "锺离 宇文 长孙 慕容 鲜于 闾丘 司徒 司空 丌官 司寇 仉 督 子车 颛孙 端木 巫马 公西 漆雕 乐正 "
                    + "壤驷 公良 拓拔 夹谷 宰父 谷梁 晋 楚 阎 法 汝 鄢 涂 钦 段干 百里 东郭 南门 呼延 归 海 羊舌 微生 "
                    + "岳 帅 缑 亢 况 后 有 琴 梁丘 左丘 东门 西门 商 牟 佘 佴 伯 赏 南宫 墨 哈 谯 笪 年 爱 阳 佟";
            String[] s = xing.split(" ");
            Random r = new Random();
            return s[r.nextInt(s.length)];          
        }
}

测试

 User u=null;
        for(int i=0;i<20;i++) {
            u = new User();
            u.setNumber(RandomValue.getRandomChar(5, 3));
            u.setName(RandomValue.getXingshi()+RandomValue.getRandomSC(2));
            u.setSex(RandomValue.getRandomSex());
            u.setBirth(RandomValue.randomDate("1980-01-01", "1980-12-31"));
            u.setPass(RandomValue.getRandomChar(1, 1)+RandomValue.getRandomChar(7, 2));
            System.out.println(u);

        }

结果
User [number=95609, name=亢禁亿, sex=男, birth=Sat Jul 26 02:46:53 CST 1980, pass=Brtdqxzp]
User [number=46748, name=查铆畜, sex=男, birth=Tue Jun 17 19:30:52 CST 1980, pass=Tzpdvjeh]
User [number=82454, name=毋遥曰, sex=女, birth=Thu Jan 10 02:38:18 CST 1980, pass=Krasgefx]
User [number=09527, name=左丘索彰, sex=女, birth=Mon Feb 18 07:44:04 CST 1980, pass=Phfxjtnt]
User [number=37894, name=那擅摧, sex=男, birth=Wed Jan 30 14:06:49 CST 1980, pass=Qauekmqf]
User [number=65314, name=艾勇第, sex=男, birth=Sat Feb 16 02:09:55 CST 1980, pass=Btlhktvt]
User [number=78086, name=连沮施, sex=男, birth=Sun Apr 20 14:35:55 CST 1980, pass=Qjypbtqg]
User [number=26437, name=聂摘用, sex=女, birth=Fri Aug 22 17:56:13 CST 1980, pass=Lccazjrc]
User [number=19244, name=佘违碧, sex=女, birth=Fri Apr 18 17:38:10 CST 1980, pass=Shbjtuar]
User [number=60795, name=家冬泥, sex=男, birth=Sat Mar 22 18:33:58 CST 1980, pass=Yxfpauuo]
User [number=59884, name=戈土野, sex=男, birth=Thu Dec 04 18:17:51 CST 1980, pass=Qvuhszun]
User [number=82829, name=尹芝望, sex=男, birth=Tue Apr 08 17:35:57 CST 1980, pass=Mkugvkpk]
User [number=08300, name=相奉溯, sex=男, birth=Sat Jan 26 17:16:21 CST 1980, pass=Pjnmmknl]
User [number=27674, name=汤扭仓, sex=女, birth=Wed May 14 14:12:47 CST 1980, pass=Uhmsmfwc]
User [number=34033, name=祝川轩, sex=男, birth=Sun Jun 01 13:57:32 CST 1980, pass=Hxgwgpgg]
User [number=05564, name=周数顶, sex=女, birth=Tue Nov 25 02:30:21 CST 1980, pass=Tartmppw]
User [number=39114, name=翁臀等, sex=男, birth=Mon Oct 13 01:27:27 CST 1980, pass=Ilcrbfch]
User [number=11131, name=麻哟芽, sex=男, birth=Wed Jun 25 13:31:47 CST 1980, pass=Vxqvpazr]
User [number=64200, name=樊翌泼, sex=女, birth=Sat Apr 26 00:43:19 CST 1980, pass=Gaxafszr]
User [number=13456, name=沃榜增, sex=女, birth=Mon Dec 15 06:07:10 CST 1980, pass=Euyjfpfw]

同志们,可以试试了
Created by 薛萌
这里写图片描述

你可能感兴趣的:(java)