需求

利用JAVA编写一个程序,该程序实现随机生成一个10位以内的随机验证码,随机验证码由阿拉伯数字、大写字母、小写字母组成。

需求分析

构造一个方法以提高程序复用率。定义该方法返回值类型为String类,形参列表传入验证码的长度。在方法中利用一个For循环根据验证码的长度来控制,验证码生成方面,在For循环中随机生成一个0-3范围内的数,利用一个Switch语句创造三个分支,0代表随机生成大写字母,1代表随机生成小写字母,2代表随机生成阿拉伯数字。在三个分支内又通过随机方法生成大写字母、小写字母或阿拉伯数字,再利用一个String变量存储生成的随机验证码,最后循环结束后返回String变量中的值,其即为最终随机生成的验证码。
在主方法中,同样采用一个随机方法生成验证码的长度,再调用方法实现随机生成验证码,最后将其输出完成,这样就保证了验证码从长度到验证码的各个构成均为随机。

代码实现

package ljh.mask.Example20220720;

import java.util.Random;
//import java.util.Scanner;

public class code {
    public static void main(String[] args) {

        //需求:定义方法实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母

        Random r = new Random();
        int n = r.nextInt(10) + 1;
        String code = CreatCode(n);
        System.out.println("您的验证码为:" + " " + code);
    }

    public static String CreatCode(int n){
        Random r = new Random();
        String code = "";
        for (int i = 0; i < n; i++) {
            int type = r.nextInt(3);
            switch (type){
                case 0:
                    char ch = (char) (r.nextInt(26) + 65);
                    code += ch;
                    break;
                case 1:
                    char sh = (char) (r.nextInt(26) + 97);
                    code += sh;
                    break;
                case 2:
                    code += r.nextInt(10);
                    break;
            }
        }
        return code;
    }
}

要想实现此需求还有第二种写法,可以采用String类中的方法来实现。
首先创建一个String字符串将所有的大写字母、小写字母及0-9之间的数字全部存入其中,然后利用随机数方法随机出一个索引值(范围为String字符串的长度),再以该索引值为参数使用String类中的charAT方法,因为该方法的功能是获取某个索引位置出的字符,而具体获取哪个索引位置的字符是由Random方法随机出来的,这就达成了随机字符的目的,再定义一个字符串将随机出来的每个字符存入其中,再将其列入循环,最后将字符串输出就是随机生成的验证码了。
来看下具体代码实现

package ljh.mask.YZM;

import java.util.Random;

public class code {
    public static void main(String[] args) {
        //随机生成一个5位的由大写字母、小写字母、0-9之间的数字组成的验证码
        //用string类来做
        String Readycode = "abcdefghijklmnopqrstuvwxyzQWERTYUIOPASDFGHJKLZXCVBNM0123456789";
        Random r = new Random();
        int n = r.nextInt(10) + 1;
        String code = "";
        int Index;
        for (int i = 0; i <= n; i++) {
            Index = r.nextInt(63);
            code += Readycode.charAt(Index);
        }
        System.out.println(code);
    }
}