(JAVA码Python)每天编程一小时: 动态验证码
发表在Java图书答疑
2020-03-07
《零基础学Java》第11章 Swing程序设计
是否精华
是
否
版块置顶:
是
否
最近没有JAVA每天编程一小时,只好借用Python的了
任务:https://zyk.mingrisoft.com/OneHour/detail/type/1/id/213.html
随着大数据和人工智能技术的发展,普通验证码很容易被破解。如何提高验证码的破解难度,保护用户账户和资金的安全呢?使用动态验证码技术是一种比较好的方式,动态验证码如图所示。编写一个程序,实现动态验证码,其实动态验证码是一个GIF动画,用户将动画中的验证码输入到验证码输入框,如果验证正确,提示“验证通过,将退出系统!”,否则提示“验证码不正确,请重新输入!”。运行效果如下图所示。
以下是JAVA代码
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
public class Test extends JFrame {
JTextField text;// 文本输入框
JLabel jlCap;// 验证码图片标签
int num;// 定义随机数变量
public static List<String> capList = new ArrayList<String>();// 定义验证码内容集合
static {// 添加验证码图片字符内容的静态代码块
capList.add("36uad");
capList.add("eun2p");
capList.add("tgy19");
capList.add("1tt8i");
capList.add("1gria");
capList.add("4gsah");
capList.add("2q6gy");
capList.add("2gnf7");
capList.add("q4q1y");
capList.add("5qhi6");
capList.add("1ferh");
capList.add("wtyiq2");
capList.add("5ttyi");
}
public Test() {// 构造方法初始化窗体
setTitle("动态验证码");// 窗体标题
setSize(450, 160);// 窗体大小
setLocationRelativeTo(null);// 窗体居中
setVisible(true);// 窗体可见
setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭方式
Container c = getContentPane();// 获取容器
c.setLayout(null);// 设置绝对布局
Font font = new Font("仿宋", Font.BOLD, 15);// 统一设置字体
Icon icon = new ImageIcon("image/sport.png");
JLabel jl1 = new JLabel(icon);// 新增会员标签
jl1.setBounds(10, 10, 97, 19); // 设置位置及大小
JLabel jl2 = new JLabel("请输入验证码:");// 文字标签
jl2.setFont(font);
jl2.setBounds(10, 45, 115, 20);
this.text = new JTextField();// 文本输入框
this.text.setFont(font);
this.text.setBounds(125, 43, 80, 24);
this.jlCap = new JLabel();// 验证码图片标签
changeCap();// 设置标签的图片
this.jlCap.setBounds(205, 35, 133, 39);
JButton change = new JButton("换一张");
change.setFont(font);
change.setBounds(340, 42, 85, 26); // 换图按钮
change.setBorderPainted(false);// 设置按钮无边框
JButton enter = new JButton("确认");// 确认按钮
enter.setFont(font);
enter.setBounds(240, 80, 70, 26);
JButton quit = new JButton("退出");// 退出按钮
quit.setFont(font);
quit.setBounds(340, 80, 70, 26);
// 向容器添加所有标签按钮等组件
c.add(jl1);
c.add(jl2);
c.add(this.text);
c.add(this.jlCap);
c.add(change);
c.add(enter);
c.add(quit);
change.addActionListener(new ActionListener() {// 换图按钮触发事件
@Override
public void actionPerformed(ActionEvent args) {
changeCap();
}
});
enter.addActionListener(new ActionListener() {// 确定按钮触发事件匿名内部类
@Override
public void actionPerformed(ActionEvent args) {
if (ifCap(getNum(), text.getText())) {// 验证码正确则弹出
//正确对话框,否则弹出错误对话框
JOptionPane.showMessageDialog(null, "验证通过,将登入
系统!", "动态验证码", JOptionPane.WARNING_MESSAGE);
System.exit(0);// 退出程序
} else {
JOptionPane.showMessageDialog(null, "验证码不正确,请
重新输入!", "动态验证码", JOptionPane.ERROR_MESSAGE);
changeCap();// 更换验证码图片
}
}
});
quit.addActionListener(new ActionListener() {// 退出按钮触发事件
@Override
public void actionPerformed(ActionEvent args) {
System.exit(0);// 退出程序
}
});
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public void changeCap() {// 更换验证码图片方法
setNum((int) (Math.random() * capList.size()));// 生成随机数
jlCap.setIcon(new ImageIcon("image/cap/验证码" + getNum() + ".gif"));//重设图片
text.setText("");// 文本框清空
text.requestFocus();// 文本框鼠标聚焦
}
public boolean ifCap(int num, String cap) {// 验证输入验证码是否正确
return capList.get(num).equals(cap.toLowerCase());// 返回比较结果
}
public static void main(String[] args) {
new Test();
}
} 于2020-03-07 23:25:03编辑

购物车
发表新帖
立即签到







