案例三:验证码
-
需求:
- 实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母
-
分析:
- 定义一个生成验证码的方法verifyCode,方法参数是位数、方法的返回值类型是String
- 在方法内部使用循环生成指定位数的随机字符,并连接起来
- 把连接好的随机字符作为一组验证码进行返回
-
实现:
1. 定义一个生成验证码的方法verifyCode,设置一个形参:int n(验证码位数),返回值类型是String
2. 定义一个空字符串,用于接收生成的随机字符
3. 创建一个随机数对象,用于生成随机字符
4. 定义一个for循环,循环n次,依次生成随机字符:英文大写、小写,数字
5. 生成一个随机字符,范围是3:0 1 2,定义变量接收这个随机字符
6. 使用switch分支判断这个生成的随机字符:
如果随机字符是0:则生成一个英文大写字符
大写字符:A~Z
(1) A的ascii码是65,由于英文字母有26个,A已经是1个了,所以 Z可以表示为65+25
(2) 减加法:65 - 65+25 == (0 - 25) + 65
如果随机字符是1:则生成一个英文小写字符
小写字符:a~z
(1) a的ascii码是97,由于英文字母有26个,a已经是1个了,所以 z可以表示为97+25
(2) 减加法:97 - 97+25 == (0 - 25) + 97
如果随机字符是2:则生成一个数字
0~9
7. 返回这组验证码
8. 调用方法,传递一个任意正整数给形参:int n,生成验证码
package com.app.demo;
import java.util.Random;
/**
案例三:验证码
- 需求:
- 实现随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母
- 分析:
- 定义一个生成验证码的方法verifyCode,方法参数是位数、方法的返回值类型是String
- 在方法内部使用循环生成指定位数的随机字符,并连接起来
- 把连接好的随机字符作为一组验证码进行返回
*/
public class Test3 {
public static void main(String[] args) {
// 8. 调用方法,传递一个任意正整数给形参:int n,生成验证码
String code = verifyCode(5);
System.out.println("验证码: " + code);
}
// 1. 定义一个生成验证码的方法verifyCode,设置一个形参:int n(验证码位数),返回值类型是String
public static String verifyCode(int n) {
// 2. 定义一个空字符串,用于接收生成的随机字符
String code = "";
// 3. 创建一个随机数对象,用于生成随机字符
Random rd = new Random();
// 4. 定义一个for循环,循环n次,依次生成随机字符:英文大写、小写,数字
for (int i = 0; i < n; i++) {
// i = 0 1 2 3 4
// 5. 生成一个随机字符,范围是3:0 1 2,定义变量接收这个随机字符
int type = rd.nextInt(3); // 0 1 2
// 6. 使用switch分支判断这个生成的随机字符:
switch (type) {
// 如果随机字符是0:则生成一个英文大写字符
case 0:
/*
大写字符:A~Z
(1) A的ascii码是65,由于英文字母有26个,A已经是1个了,所以 Z可以表示为65+25
(2) 减加法:65 - 65+25 == (0 - 25) + 65
*/
// 要的是英文大写字符,所以需要用char变量来接收,char接收int类型的,属于小 接 大,需要强制转换类型
char ch = (char) (rd.nextInt(26) + 65);
// 将生成的随机字符拼接起来
code += ch;
break;
// 如果随机字符是1:则生成一个英文小写字符
case 1:
/*
小写字符:a~z
(1) a的ascii码是97,由于英文字母有26个,a已经是1个了,所以 z可以表示为97+25
(2) 减加法:97 - 97+25 == (0 - 25) + 97
*/
// 要的是英文小写字符,所以需要用char变量来接收,char接收int类型的,属于小 接 大,需要强制转换类型
char ch1 = (char) (rd.nextInt(26) + 97);
// 将生成的随机字符拼接起来
code += ch1;
break;
// 如果随机字符是2:则生成一个数字
case 2:
// 0 - 9
// 将生成的随机数字拼接起来
code += rd.nextInt(10);
break;
}
}
// 7. 返回这组验证码
return code;
}
}
输出结果:
验证码: 6PIL4