图形验证码

news/2024/9/29 23:13:28

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/66358.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

PlantSimulation的socket交互之TCP

PlantSimulation的socket交互之TCP1.python的socket TCP客户端建立 其实可以任选python或plantsimulation作为客户端,博主因研究需要,将python设为客户端。plant设为服务器。1 """2 Created on Sat December 14 21:00:00 20213 @author: Zhang Litong- Nanjin…

2024-2025-1 20241419《计算机基础与程序设计》第一周学习总结

课程 要求 目标:基于VirtualBox虚拟机安装Ubuntu 作业正文:基于VirtualBox虚拟机安装Ubuntu 教材学习内容总结 1.计算系统:由软件、硬件及其管理的数据组成的用于解决问题以及与其所处环境进行交互的一种动态实体。 2.计算系统的分层:计算系统的各个具体组成部分。 3.抽象:…

Rhino基础操作3 - 出图篇

Rhino建模后出一系列的图的操作:建模后做倒角、利用快照切换视图。 出图有:纯线稿、截面图、剖面图、模型的说明书类、模型渲染图。注:非结构建模专业,纯粹是用Rhino写实用新型专利,所以学了下Rhino的建模。不理解最简面、曲线阶数的影响等,请原谅。--本篇导航--圆角(假…

vscode中文乱码问题

vscode中文乱码解决方法 简单粗暴:文件——>首选项——>设置——>搜索设置——>encoding——>Files:Encoding ——> gbk 修改实现注:可在同文件夹下实现效果; 如果不是固定常用,方法二: 这个就在规定文本文件实现;

AirPods 4 All In One

AirPods 4 All In One AirPods 4 (支持主动降噪) 优点 有主动降噪功能 缺点 与 AirPods 2 对比,耳机柄变短了,不方便佩戴、取下AirPods 4 All In OneAirPods 4 (支持主动降噪)优点有主动降噪功能缺点与 AirPods 2 对比,耳机柄变短了,不方便佩戴、取下(捏不住)demos免费镌刻…

WPF下使用FreeRedis操作RedisStream实现简单的消息队列

Redis Stream简介 Redis Stream是随着5.0版本发布的一种新的Redis数据类型: 高效消费者组:允许多个消费者组从同一数据流的不同部分消费数据,每个消费者组都能独立地处理消息,这样可以并行处理和提高效率。 阻塞操作:消费者可以设置阻塞操作,这样它们会在流中有新数据添加…

联考题解

联考题解 龙(dragon) 难点: (1)删边后如何寻找新的最短路。 (2)A,B两方的决策互相影响十分复杂。 (3)如何统计每个起点的ans。 解题: (3)解决这类多起点一终点的问题,可以想到dp。 (1)解决这类最短路转移的问题,可以考虑最短路树。 (2)解决这类博弈问题,可…