图形验证码
随机生成6位验证码,包含数字和大小写字母,可生成为图形,在界面中输入验证码进行验证
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.util.Random;
class CaptchaGenerator extends JFrame { //创建一个窗口界面
private JLabel captchaLabel; //显示生成的验证码图像
private JTextField userInputField; //接受用户输入的验证码
private String captchaCode; //存储生成的验证码字符串
// 构造方法,设置窗口基本属性
public CaptchaGenerator() {
setTitle("验证码生成器");
setSize(300, 150); //设置窗口的大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗口关闭时退出程序
setLayout(new FlowLayout()); //设置窗口的布局为流式布局,组件将从左到右排列
// 生成随机验证码
captchaCode = generateRandomCode(6);
// 创建验证码图像
captchaLabel = new JLabel(new ImageIcon(createCaptchaImage(captchaCode)));
add(captchaLabel); //将验证码标签添加到窗口中
// 用户输入框
userInputField = new JTextField(10); //创建一个文本输入框,宽度为10个字符
add(userInputField); //将输入框添加到窗口中
// 验证按钮
JButton verifyButton = new JButton("验证"); //创建一个按钮
verifyButton.addActionListener(new VerifyButtonListener()); //为按钮添加事件监听器,点击按钮时将触发
add(verifyButton); //将按钮添加到窗口中
setVisible(true);
}
// 生成随机验证码
private String generateRandomCode(int n) {
Random r=new Random();
String code = "";
for (int i=1 ; i<=n ; i++){
int type = r.nextInt(3);
switch (type)
{
case 0:
code += r.nextInt(10);
break;
case 1:
char c1 = (char)(r.nextInt(26) + 65);
code += c1;
break;
case 2:
char c2 = (char)(r.nextInt(26) + 97);
code += c2;
break;
}
}
return code;
}
// 生成验证码图像
private BufferedImage createCaptchaImage(String code) {
int width = 150;
int height = 50;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
// 设置背景色
g.setColor(Color.LIGHT_GRAY);
g.fillRect(0, 0, width, height); //绘制一个填充的矩形,作为背景
// 设置字体和颜色
g.setFont(new Font("楷体", Font.BOLD, 30));
g.setColor(Color.BLACK);
// 绘制验证码
g.drawString(code, 20, 35); //在图像中绘制验证码字符串,指定文本的位置
g.dispose();
return image;
}
// 验证按钮监听器
private class VerifyButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String userInput = userInputField.getText();// 获取用户输入的验证码
if (userInput.equals(captchaCode)) {
JOptionPane.showMessageDialog(null, "验证码正确,验证通过!");
} else {
JOptionPane.showMessageDialog(null, "验证码错误,请重试!");
}
}
}
// 主方法
public static void main(String[] args) {
SwingUtilities.invokeLater(CaptchaGenerator::new);
}
}