验证码工具类 – Random – 随机数用法 – 豹子号 – 顺子号

文章最后更新时间:2025年05月16日

Math.random()方法 返回的是 [0,1) 区间范围的数  使用规则一般是 Math.random()*(Max+1 - min)+min 就可以达到[min,Max]的数了

高性能的随机数ThreadLocalRandom

京东说:避免Random实例(Random实例包括java.util.Random实例或者 Math.random()方法)被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed导致的性能下降。为了保证性能,推荐使用ThreadLocalRandom.current().nextInt()

// 取值范围是 [0,10),也就是[0,9]ThreadLocalRandom.current().nextInt(10); 

# Demo// 取值范围是: 原范围是[0,9],左右取值范围+1 即:[1,10]ThreadLocalRandom.current().nextInt(10)+1;

image.png

场景,需要做个验证码 生成器,不需要图片。只能自己做一个,虽然网站有很多,自己写的,自己用着舒服。可能性能没别人好,但是可以借着做一篇 调优篇。

Random

import java.util.Random;/**
 * @author : zanglikun
 * @date : 2021/2/1 11:03
 * @Version: 1.0
 * @Desc : 验证码 生成。 有个缺点,有时间 进行修复 :每次 都是 new出来 Random对象 、String[]、StringBuilder对象 看看能不减少生成次数
 */public class CheckCodeUtil {// 纯数字private final static String allnumcode = "0,1,2,3,4,5,6,7,8,9";// 纯小写字母private final static String allcharcode = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";// 全混合性private final static String allcode = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9";// 输入验证码长度 生成纯数字验证码public static String allnumcode(int num){StringBuilder code = new StringBuilder();
        String[] split = allnumcode.split(",");Random random = new Random();//Math.random()方法 返回的是 [0,1) 区间范围的数  使用规则一般是 Math.random()*(Max - min)+min 就可以达到[min,Max]的数了for (int i = 0; i < num; i++) {
            code.append(split[random.nextInt(split.length)]);
        }return code.toString();
    }// 输入验证码长度 生成纯小写字母验证码public static String alllowcasecharcode(int num){StringBuilder code = new StringBuilder();
        String[] split = allcharcode.split(",");Random random = new Random();//Math.random()方法 返回的是 [0,1) 区间范围的数  使用规则一般是 Math.random()*(Max+1 - min)+min 就可以达到[min,Max]的数了for (int i = 0; i < num; i++) {
            code.append(split[random.nextInt(split.length)]);
        }return code.toString();
    }// 输入验证码长度 生成混合型字母验证码public static String allcode(int num){StringBuilder code = new StringBuilder();
        String[] split = allcode.split(",");Random random = new Random();//Math.random()方法 返回的是 [0,1) 区间范围的数  使用规则一般是 Math.random()*(Max+1 - min)+min 就可以达到[min,Max]的数了for (int i = 0; i < num; i++) {
            code.append(split[random.nextInt(split.length)]);
        }return code.toString();
    }/**
     * 测试 验证码
     * @param args
     */public static void main(String[] args) {
        System.out.println(allnumcode(6));
        System.out.println(alllowcasecharcode(6));
        System.out.println(allcode(6));
    }
}

想要生成带图片验证码的,请参考 Hutool工具。

https://hutool.cn/docs/#/captcha/%E6%A6%82%E8%BF%B0?id=%e8%87%aa%e5%ae%9a%e4%b9%89%e9%aa%8c%e8%af%81%e7%a0%81

文章版权声明:除非注明,否则均为八一构原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,75人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码