Java 生成验证码的四种方式、源码、过程、结果

简介

使用Java基本的逻辑和方法生成所需要的验证码,且生成的验证码包含大小写字母和数字,当然啦,也有纯数字的验证码。每一个方式都有详细的注释解析😆😆😆

第一种方式 Random 随机数类生成验证码

/**
 * @version 1.0
 * @ClassName LetterAndNumberRandom
 * @Description 随机生成一个大写字母和小写字母,以及一个0到9之间的数字。
 * @Author 南极
 * @Date 2024/3/21 8:45
 */
public class LetterAndNumberRandom {

    public static void main(String[] args) {
        //控制验证码的长度
        int lengthRandom = 5;

        //定义一个StringBuffer减少字符串拼接的次数
        StringBuilder randomCode = new StringBuilder();

        //验证码多长循环多长
        for (int i = 0; i < lengthRandom; i++) {
            //大写字母范围的ASCII码
            int upperLetter = (int) (Math.random() * (90 - 65 + 1) + 65);
            //小写字母范围的ASCII码
            int lowerLetter = (int) (Math.random() * (122 - 97 + 1) + 97);
            //生成0到9之间的ASCII码
            int number = (int) (Math.random() * (57 - 48 + 1) + 48);
            //定义验证码的判断规则
            int rand = (int) (Math.random() * 3);
            //switch结构实现验证码的追加
            switch (rand) {
                case 0:
                    randomCode.append((char) upperLetter);
                    break;
                case 1:
                    randomCode.append((char) lowerLetter);
                    break;
                case 2:
                    randomCode.append((char) number);
                    break;
            }
        }
        //将StringBuffer转换成String类型使用分割方法,获取5位验证码
        String[] splitCode = randomCode.toString().split("");

        //这种方式:Arrays.toString(splitCode)  或者for循环
        System.out.print("获取五位随机数作为验证码(包括数字和字母大小写):");
        //for循环或者上述方式
        for (String s : splitCode) {
            System.out.print(s + "   ");
        }

        System.out.println();
        for (int i = 0; i < splitCode.length; i++) {
            //将字符串类型的数字下标i一个一个转换成char类型
            char charCode = splitCode[i].charAt(0);
            String str = "";
            //判断验证码的类型
            if (charCode >= 'A' && charCode <= 'Z') {
                str = "字母大写";
            } else if (charCode >= 'a' && charCode <= 'z') {
                str = "字母小写";
            } else {
                str = "数字";
            }
            System.out.print("验证码第" + (i + 1) + "位是" + str + "     ");
        }
    }
}

第一种方式,是在main方法中生成的验证码,想要获取最终结果的小伙伴,可以把最后的for循环删除,然后把里面的代码提取成一个方法哦😊😊😊

运行结果

第二种方式 洗牌算法实现验证码

import java.util.Random;

/**
 * @version 1.0
 * @ClassName VerificationCode验证码类
 * @Description 随机5位数的验证码
 * @Author 南极
 * @Date 2024 - 04 - 19 - 8:28
 */
public class VerificationCode {
    public static void main(String[] args) {
        // 调用静态的5位数验证码的方法,获取一个5位数的验证码
        String verifyCode = verificationCode(5);
        // 打印验证码
        System.out.println("您获取的验证码是:" + verifyCode);
        // 判断每一个字符是否为数字或字母
        printCaseOrNumber(verifyCode);
    }

    /**
     * 随机生成包含大小写字母和数字的验证码
     *
     * @param length 验证码的长度
     * @return 返回最后生成的验证码
     */
    public static String verificationCode(int length) {
        // 创建一个StringBuffer类用于保存验证码
        StringBuilder strCode = new StringBuilder();
        // 循环添加字母,26个小写字母,26个大写字母,10个数字
        for (int i = 0; i < 62; i++) {
            // 判断是否为小写字母
            if (i < 26) {
                strCode.append(((char) ('a' + i)));
            } else if (i < 52) {
                strCode.append(((char) ('A' + i - 26)));
            } else {
                strCode.append((i - 52));
            }
        }
        // 创建随机类对象
        Random r = new Random();
        // 获取字符串长度
        int strLength = strCode.length();
        // 使用洗牌算法的逻辑,打乱StringBuilder对象
        for (int i = 0; i < strLength; i++) {
            // 获取随机索引
            int tempIndex = r.nextInt(strCode.length());
            // 交换的中间变量
            char temp = strCode.charAt(tempIndex);
            // 设置随机变量值为下标 i 的值
            strCode.setCharAt(tempIndex, strCode.charAt(i));
            // 那么下标 i 的值就等于随机下标的值
            strCode.setCharAt(i, temp);
        }
        return strCode.substring(0, length);
    }
}

这种方式实现的验证码很新奇,基本是不常见的验证码,会发现他生成的验证码出奇的乱,很少见😁😁😁

运行结果

第三种方式 我称之为简单方式哦

import java.util.Random;

/**
 * @version 1.0
 * @ClassName SimplenessCode
 * @Description 简单方式生成验证码
 * @Author NanJi
 * @Date 2024/8/9 - 8:51
 */
public class Captcha {
    public static void main(String[] args) {
        // 创建随机数生成器对象
        Random r = new Random();
        // 创建StringBuilder对象高效存储字符串
        StringBuilder sb = new StringBuilder();
        // 定义一个要随机的验证码字符串
        String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        // 验证码的长度,后续要获取多长的验证码只需要修改一下这个变量值即可
        int length = 5;
        // 循环多少次,生成多长的验证码
        for (int i = 0; i < length; i++) {
            // 获取随机数
            int index = r.nextInt(str.length());
            // 获取随机字符
            char c = str.charAt(index);
            // 将随机字符添加到StringBuilder对象中
            sb.append(c);
        }
        // 打印验证码,这里可以直接输出StringBuilder对象是因为他默认调用了toString()方法
        System.out.println(sb);
    }
}

这是非常简单的一个方式啦,其他的方式看不懂的小伙伴,就可以使用这个哈🤗🤗🤗

运行结果

第四种方式 纯数字验证码

/**
 * @version 1.0
 * @ClassName NumberCode
 * @Description 生成存数字的验证码
 * @Author NanJi
 * @Date 2024/8/9 - 9:06
 */
public class NumberCode {
    public static void main(String[] args) {
        System.out.println(numberCode(5));
    }

    /**
     * 生成指定长度的数字验证码
     *
     * @param length 验证码的长度
     * @return 返回生成的验证码
     */
    private static String numberCode(int length) {
        // 这里可以看到生成的随机数是什么样子的
        double r = Math.random();
        System.out.println(r);
        // 加上一个""双引号是为了让数字和字符串拼接成新的字符串,这样子就可以截取数字了
        return (r + "").substring(2, 2 + length);
    }
}

这个方式可以生成一个纯数字的验证码,而且效率非常快,美中不足的是,它只能16位,但是也够用了,一般验证码用不到那么长🤔🤔🤔

运行结果

小结:

上述的几种方法,都脱离不了随机数,有用到switch结构,洗牌算法,通过索引追加的方式,获取到最终结果,大家有其他更好的方式也欢迎评论区一起探讨哦🤔🤔🤔

欧了,到这里我应该解释的差不多啦,我是南极,大胆做自己,活出精彩的人生👊👊👊

### 回答1: public class VerificationCode { public static void main(String[] args) { //生成6位随机字符串 String code = ""; for(int i=0;i<6;i++) { char c = (char)(Math.random()*26+'A'); code += c; } System.out.println("验证码为:"+code); } } ### 回答2: 以下是一个使用Java代码编写的生成验证码的功能: ```java import java.util.Random; public class CaptchaGenerator { private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; private static final int CAPTCHA_LENGTH = 6; public static String generateCaptcha() { StringBuilder captcha = new StringBuilder(); Random random = new Random(); for (int i = 0; i < CAPTCHA_LENGTH; i++) { int index = random.nextInt(CHARACTERS.length()); captcha.append(CHARACTERS.charAt(index)); } return captcha.toString(); } public static void main(String[] args) { String captcha = generateCaptcha(); System.out.println("生成验证码为: " + captcha); } } ``` 这个生成验证码的功能使用了一个字符集和验证码长度常量。在generateCaptcha方法中,首先创建一个StringBuilder对象,然后使用Random类来随机生成一个指定范围内的索引,根据这个索引从字符集中选择一个字符,将它追加到字符串中。循环重复以上步骤,直到达到指定的验证码长度。最后返回生成验证码字符串。 在main方法中,调用generateCaptcha方法生成验证码,并打印在控制台上。 ### 回答3: 以下是一个使用Java编写的生成验证码的功能的示例源码: ```java import java.util.Random; public class VerificationCodeGenerator { public static void main(String[] args) { String verificationCode = generateVerificationCode(6); // 生成6位验证码 System.out.println("验证码:" + verificationCode); } // 生成指定长度的验证码 public static String generateVerificationCode(int length) { String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; StringBuilder verificationCode = new StringBuilder(); Random random = new Random(); for (int i = 0; i < length; i++) { int index = random.nextInt(characters.length()); verificationCode.append(characters.charAt(index)); } return verificationCode.toString(); } } ``` 上述代码中,我们定义了一个名为`VerificationCodeGenerator`的类。在该类中,我们提供了一个静态方法`generateVerificationCode`,用于生成指定长度的验证码。该方法接受一个整数参数`length`,表示验证码的长度。在方法内部,我们定义了一个包含所有可能字符的字符串`characters`,并创建一个`StringBuilder`对象`verificationCode`用于保存生成验证码。 通过使用`java.util.Random`类可以生成随机数。我们使用`Random`类的`nextInt`方法生成一个随机的索引值,然后使用该索引从`characters`字符串中获取对应字符,并将其添加到`verificationCode`中。重复这一过程直到生成指定长度的验证码。 在`main`方法中,我们调用`generateVerificationCode`方法生成一个长度为6的验证码,并将其打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值