图形验证码

随机生成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);
    }
}

posted @ 2024-09-29 23:05  阿伟·  阅读(10)  评论(0编辑  收藏  举报