《Java验证码生成实战(上):基础字母与数字随机生成》

5 阅读3分钟

一、需求背景

实现一个6位长度的验证码生成器,要求:

  • 组成元素:大写字母(A-Z)、小写字母(a-z)、数字(0-9)
  • 分配规则:前5位为随机字母,最后1位为随机数字

二、代码逐段解析

1. 主程序入口

public static void main(String[] MakeItPossible) {
    // 调用两个生成方法
    String resultRandomString = randomCodeHandle(); // 生成5位字母
    int resultRandomNumber = randomNumberHandle();  // 生成1位数字
    System.out.println("验证码为:" + resultRandomString + resultRandomNumber);
}
  • 功能:协调字母和数字生成模块,拼接最终结果
  • 关键点
    • 字母部分长度固定为5位
    • 数字部分单独生成1位

2. 字母生成模块

public static String randomCodeHandle() {
    // 创建包含52个字母的数组
    char[] codeChars = new char[52];
    for(int i = 0; i < codeChars.length; i++) {
        if (i < 26) {
            codeChars[i] = (char) (97 + i); // 小写字母a-z
        } else {
            codeChars[i] = (char) (65 + i - 26); // 大写字母A-Z
        }
    }
    
    // 随机选取5个字母
    Random r = new Random();
    String resultCodeString = "";
    for (int j = 0; j <= 4; j++) { // 循环5次生成5位
        resultCodeString += codeChars[r.nextInt(codeChars.length)];
    }
    return resultCodeString;
}
  • 实现步骤

    1. 构建字母表:通过ASCII码动态生成所有字母
      • 97对应小写字母'a',65对应大写字母'A'
      • 前26位填充小写字母,后26位填充大写字母
    2. 随机选择:从数组中随机抽取5个字符拼接
  • ASCII码转换表

    字符类型ASCII起始码计算公式
    小写字母97 (a)(char)(97 + i)
    大写字母65 (A)(char)(65 + i -26)

3. 数字生成模块

public static int randomNumberHandle() {
    Random r = new Random();
    int number = r.nextInt(10); // 生成0-9的随机数
    return number;
}
  • 实现逻辑
    • nextInt(10)生成范围在0(含)到10(不含)之间的整数
    • 即生成0-9的单个数字

三、完整代码示例

package com.insightfuture.test;

import java.util.Random;

public class RandomCode {
    public static void main(String[] MakeItPossible) {
        /*
         * 随机产生验证码:
         *   - 需求: 包含 大写字母、小写字母、数字
         *   - 6位长度的验证码
         */
        String resultRandomString = randomCodeHandle();
        int resultRandomNumber = randomNumberHandle();
        System.out.println("验证码为:" + resultRandomString + resultRandomNumber);
    }


    /**
     * randomCodeHandle方法:验证码字符串随机生成器
     * @return String resultString
     */
    public static String randomCodeHandle() {
        char[] codeChars = new char[52];
        for(int i = 0; i < codeChars.length; i++) {
            if (i < 26) {
                // 生成 26 个 小写字母
                codeChars[i] = (char) (97 + i);
            } else {
                // 生成 26 个大写字母  (这里 -26 是因为 i 进入到这 i = 27, 因此 65 + 27 = 92, 92 - 26 = 66)
                codeChars[i] = (char) (65 + i - 26);
            }
        }
        Random r = new Random();
        String resultCodeString = "";
        for (int j = 0; j <= 4; j++) {
            resultCodeString += codeChars[r.nextInt(codeChars.length)];
        }
        return resultCodeString;
    }


    /**
     * randomNumberHandle方法:数字随机生成器
     * @return int number
     */
    public static int randomNumberHandle() {
        Random r = new Random();
        int number = r.nextInt(10);
        return number;
    }
}


四、典型运行结果

验证码为:mXyRt7
验证码为:kJhBn3
验证码为:vPdFq9

五、下篇预告:验证码系统强化方向

在《Java验证码生成实战(下)》中,我们将探讨以下增强功能:

  1. 混合字母数字:打破固定前字母后数字的排列规律
  2. 特殊字符支持:增加@、#、$等符号
  3. 去歧义处理:排除易混淆字符(如0/O、1/l)
  4. 线程安全优化:解决Random类的并发问题
  5. 性能提升:使用StringBuilder替代字符串拼接

示例预告代码

// 混合字母数字的增强版
String code = "A3b9Z"; 
// 包含特殊字符的验证码
String advancedCode = "K@8$t"; 

#Java基础 #验证码生成 #随机算法 #编程实战
点击关注,及时获取下篇更新! 🔔