【AWT绘图】在Java中如何生成动态的验证码?

本文介绍了如何利用Java AWT库中的Graphics类生成动态验证码。通过设置颜色、字体,绘制矩形、椭圆和字符串,创建带有干扰点的验证码图片,并随机生成四位数字或字母的验证码字符串。最后在Frame窗口中展示生成的验证码。学会这一技能有助于提高信息安全性。
摘要由CSDN通过智能技术生成

AWT绘图

Java中提供了一个Graphics类,这个类相当于一个抽象的画笔,在类中提供了很多的绘制图形的方法。

Graphics常用方法

方法名作用
setColor()指定上下文颜色,接收Color类型的参数
setFont()指定上下文字体,接收Font类型参数
drawRect()绘制矩形
drawOval()绘制椭圆形
fillRect()方法和fillOval()方法用当前颜色填充绘制完成的矩形和椭圆形
drawString()绘制一段文本

在Panpel面板上绘制一张图片验证码

 package AWT;
 ​
 import java.awt.*;
 import java.util.Random;
 public class YanZhengMa {
     public static void main(String[] args) {
         final Frame frame=new Frame("验证码");
         final Panel panel=new MyPanel();
         frame.add(panel);
         frame.setSize(200,100);
         frame.setVisible(true);
     }
 }
 class MyPanel extends Panel{
     public void  paint(Graphics g){
         //定义验证码图片的高度
         int width=320;
         //定义验证码图片的宽度
         int height=180;
         //设置上下文颜色
         g.setColor(Color.LIGHT_GRAY);
         //填充验证码背景
         g.fillRect(0,0,width,height);
         //设置上下文颜色
         g.setColor(Color.BLACK);
         //绘制边框
         g.drawRect(0,0,width-1,height-1);
         Random r=new Random();
         for(int i=0;i<100;i++){
             int x=r.nextInt(width)-2;
             int y=r.nextInt(height)-2;
             g.drawOval(x,y,2,2);
         }
         g.setFont(new Font("黑体",Font.BOLD,30));
         g.setColor(Color.BLUE);
         //生成随机数
         char[] chars=("0123456789abcdefghijkmnopqrstuvwxyzABCDEFG"+"HIJKLMNPQRSTUVWXYZ").toCharArray();
         StringBuilder sb=new StringBuilder();
         for(int i=0;i<4;i++){
             int pos=r.nextInt(chars.length);
             char c=chars[pos];
             sb.append(c+" ");
         }
         //写入验证码
         g.drawString(sb.toString(),20,30);
     }
 }

结果

 

用drawOval()方法在矩形中随机生成100个椭圆,作为验证码的干扰点,然后生成随机验证码,从chars字符数组中取出四个字符组成字符串,调用Graphics的drawString()方法将字符串绘制在矩形区域内。在主函数中,将对象panel添加到frame窗口中,窗口显示时,显示出在panel面板中绘制图形验证码。

⛵小结
以上就是我对于AWT生成动态验证码的详细分析,学会如何设置动态验证码将会提高我们信息的安全性,避免一些不必要的麻烦!

如果这篇【文章】有帮助到你,希望可以点个赞👍,创作不易,如果有对【Java基础】【后端技术】、【数据结构】【Linux操作系统】感兴趣的小可爱,也欢迎关注 【LNORA】,对【算法设计与分析】感兴趣的可以免费订阅【算法设计与分析】的专栏,如果我的文章有帮助到你,麻烦来个一键三连奥,这将是对我莫大的鼓励,我将为大家带来更加优质的文章!我们可以一起进步,每天进步一点点,我将会给你带来巨大的【收获与惊喜】💝💝

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LNORA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值