Java获取验证码
需求:
在登录注册页面中,除了用户名和密码外,通常也会包含验证码。验证码是用来区分用户是计算机还是人,防止恶意破解密码、刷票、灌水等行为。定义方法,获取一个包含4个字符的验证码,每一位字符是随机选择的字母和数字,可包含a-z,A-Z,0-9。
设计思路
查看Random、StringBuilder相关API,完成需求
代码实现1
package com.itheima.APITest.Test02;
import java.util.Random;
/*
在登录注册页面中,
除了用户名和密码外,通常也会包含验证码。
验证码是用来区分用户是计算机还是人,
防止恶意破解密码、刷票、灌水等行为。
请查看Random、StringBuilder相关API,
定义方法,获取一个包含4个字符的验证码,
每一位字符是随机选择的字母和数字,可包含a-z,A-Z,0-9。例如:
*/
public class Demo {
public static void main(String[] args) {
//调用验证码方法
String s = getVerificationCode();
//输出验证码序列
System.out.println(s);
}
//无参数,有返回值String类型
public static String getVerificationCode() {
//创建Random对象
//public Random()
//创建一个新的随机数生成器。
Random r = new Random();
//创建StringBuilder对象
//public StringBuilder()
//构造一个没有字符的字符串构建器,初始容量为16个字符。
StringBuilder sb = new StringBuilder();
//public int length()
//返回长度(字符数)。
while (sb.length() < 4) {
//public int nextInt(int bound)
//返回伪随机数,从0(包括)和指定值(排除)之间均匀分布的int值,从该随机数生成器的序列中抽取出来。
int random = r.nextInt(123);
//控制随机数的范围,char类型与int类型比较时,使用的时char类型的ascii码进行比较,总之还是int类型
if ((random > 'A' && random < 'Z') || (random > 'a' && random < 'z') || (random > '0' && random < '9')) {
//public StringBuilder append(char c)
//将char参数的字符串表示附加到此序列。
//用强制类型转换,将random的int值转成char类型
sb.append((char) random);
}
}
//public String toString()
//返回表示此顺序中的数据的字符串。
String s = sb.toString();
//返回一个String类型
return s;
}
}
代码实现2
package com.itheima.APITest.Test02;
import java.util.Random;
public class Demo2 {
public static void main(String[] args) {
//调用获取验证码的方法
String s = getVerificationCode();
//输出验证码
System.out.println(s);
}
//定义获取验证码的方法,返回值String类型,无参数
public static String getVerificationCode() {
//创建StringBuilder对象,用于存放所有能获取的字符
StringBuilder sb = new StringBuilder();
//创建String空字符串,存放获取到的字符串
String s = "";
//循环获取字符A-Z,拼接到StringBuilder对象中
for (char c = 'A'; c < 'Z'; c++) {
sb.append(c);
}
//循环获取字符a-z,拼接到StringBuilder对象
for (char c = 'a'; c < 'z'; c++) {
sb.append(c);
}
//循环获取数字0-9,拼接到StringBuilder对象
for (int i = 0; i <= 9; i++) {
sb.append(i);
}
//创建Random对象,用来获取随机数
Random r = new Random();
//循环四次,获取四个字符验证码
for (int i = 0; i < 4; i++) {
//随机获取StringBuilder对象的索引
int index = r.nextInt(sb.length());
//public char charAt(int index)
//返回指定索引处的此序列中的char值。
//将获取道德char值拼接到String对象中
s += sb.charAt(index);
}
//返回字符串
return s;
}
}