Java编程:随机生成数字串


介绍两种随机生成数字串的方法,该方法生成的随机串,小概率情况下会产生重复值,因此该方法只可用于生成验证码,不可以用于生成数字串类型的主键。还有一篇关于生成不重复的数字串的文章。如有不正之处,欢迎批评指正。

方法一:效率高,但是最大可以生成 19 位数字串

    /**
    * 随机生产 factor 位的数字,最大不超过 19位,因为long的最大值为19位
    * @param factor
    * @return
    */
    public static Long randomNum(int factor){
        return new Double((Math.random() + 1) * Math.pow(10, factor - 1)).longValue();
    }

方法二:效率低于方法一,但是它可以生成任意位数的数字串,同时可以扩展为生成数组字母串,见方法三

    public static String characters = "0123456789";
    public static String randomNum1(int factor){
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < factor; i++) {
            // nextInt(10) = [0, 10)
            sb.append(characters.charAt(random.nextInt(10)));
        }
        return sb.toString();
    }

对方法一、方法二做了简单的测试,结果如下:方法一的效率大致为方法二的10倍,而且随着生成的字符串的长度的增加,两者的差距逐步加大。

随机生成 10 位数字串,生成 1000000 次耗时:
randomNum used 49 ms
randomNum1 used 307 ms

随机生成 19 位数字串,生成 1000000 次耗时:
randomNum used 49 ms
randomNum1 used 457 ms

随机生成 10 位数字串,生成 10000000 次耗时:
randomNum used 280 ms
randomNum1 used 2283 ms

随机生成 19 位数字串,生成 10000000 次耗时:
randomNum used 309 ms
randomNum1 used 3675 ms

方法三:生成指定位数的数字字母串

    public static String characters1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    public static String randomStr(int factor){
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < factor; i++) {
            // nextInt(10) = [0, 10)
            sb.append(characters1.charAt(random.nextInt(36)));
        }
        return sb.toString();
    }

linuxboy的RSS地址:https://www.linuxboy.net/rssFeed.aspx

本文永久更新链接地址:https://www.linuxboy.net/Linux/2018-09/154333.htm

相关内容