java如何生成随机数、java生成6位验证码、随机数原理(生成过程)

简单解释一下随机数,大佬请到文章尾部直接ctrl+c ctrl+v
一般情况,程序里面的随机数默认是0到1之前的一个数,比如java里面Random的nextDouble方法

import java.security.SecureRandom;

public class Demo2{
	@Test
    public void a1() {
        SecureRandom random = new SecureRandom();
        // 输出10次
        for (int i = 0; i < 10; i++) {
            System.out.println(random.nextDouble());
        }
    } 
}

生成一个随机数,结果如下
在这里插入图片描述
最小是0.00一堆0,最后有个1
最大是0.99一堆9
这个随机数永远在0到1之间

当我们想要一个整数时,可以乘以10再取整(其他方式也行),范围就是0到10之间

	@Test
    public void a2() {
        SecureRandom random = new SecureRandom();
        // 输出10次
        for (int i = 0; i < 10; i++) {
            double v = random.nextDouble() * 10;
            System.out.println(v);
            System.out.println((int) v);
        }
    }

在这里插入图片描述

好,当我们需要6位验证码的时候,可以循环6次,每次获取一个整数(这是一个笨办法,显得没技术)

	@Test
    public void a3() {
        SecureRandom random = new SecureRandom();
        StringBuffer sb = new StringBuffer();
        // 输出10次
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 6; j++) {
                double v = random.nextDouble() * 10;
                sb.append((int) v);
            }
            System.out.println(sb);
            // 清空sb
            sb.setLength(0);
        }
    }

在这里插入图片描述

然后就有些聪明的同学就说了,我直接乘以100000不就是6位数字了么
好,我们接着看

在这里插入图片描述

  • 然后发现有的4位,有的5位,不是我们想要的结果,为什么会这样呢?
  • 这个呀是因为,随机数是0到1之间的一个数字,有可能是0.000019123414,如果是种情况,那乘以100000就是1.9123414,取整数后就1。
  • 为了预防这种情况,我们可以先乘以899999再加上100000,这样就可以避免最小值不够6位的问题了,哪怕最小值是0,加上100000也是6为数字。

效果如下
在这里插入图片描述

  • 好了,random为我们提供了更便捷的随机数生成方式,就是下面的代码,可以直接获取整型
    @Test
    public void ee() {
        SecureRandom random = new SecureRandom();
        StringBuffer sb = new StringBuffer();
        // 输出10次
        for (int i = 0; i < 10; i++) {
            // 每个随机数长度为6
            for (int j = 0; j < 6; j++) {
                sb.append(random.nextInt(10));
            }
            System.out.println(sb);
            // 清空sb
            sb.setLength(0);
        }
    }
    
    @Test
    public void cc() {
        SecureRandom random = new SecureRandom();
        for (int i = 0; i < 10; i++) {
            System.out.println(random.nextInt(899999) + 100000);
        }
    }

效果如下

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值