java 使用 swing生成验证码_java swing随机验证码

这篇博客展示了如何在Java中利用Swing库生成随机验证码。通过设置背景色、干扰线和随机数字,创建了一个4位数字的验证码图像,并将其保存在会话中,以便后续验证。同时提供了处理HTTP GET请求的方法。
摘要由CSDN通过智能技术生成

展开全部

public static  void processRequest(HttpServletRequest request,

32313133353236313431303231363533e59b9ee7ad9431333332633566   HttpServletResponse response) throws ServletException, IOException {

response.setContentType("image/jpeg");

response.setHeader("Pragma", "No-cache");

response.setHeader("Cache-Control", "no-cache");

response.setDateHeader("Expires", 0);

HttpSession session = request.getSession();

int width = 60, height = 20;

BufferedImage image = new BufferedImage(width, height,

BufferedImage.TYPE_INT_RGB);

// 获取图形上下文

Graphics g = image.getGraphics();

// 生成随机类

Random random = new Random();

// 设定背景色

g.setColor(getRandColor(200, 250));

g.fillRect(0, 0, width, height);

// 设定字体

g.setFont(new Font("Times New Roman", Font.PLAIN, 18));

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到

g.setColor(getRandColor(160, 200));

for (int i = 0; i 

int x = random.nextInt(width);

int y = random.nextInt(height);

int xl = random.nextInt(12);

int yl = random.nextInt(12);

g.drawLine(x, y, x + xl, y + yl);

}

// 取随机产生的认证码(4位数字)

String sRand = "";

for (int i = 0; i 

String rand = String.valueOf(random.nextInt(10));

sRand += rand;

// 将认证码显示到图象中

g.setColor(new Color(20 + random.nextInt(110), 20 + random

.nextInt(110), 20 + random.nextInt(110)));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成

g.drawString(rand, 13 * i + 6, 16);

}

// 将认证码存入SESSION

session.setAttribute("rand", sRand);

// 图象生效

g.dispose();

ServletOutputStream responseOutputStream = response.getOutputStream();

// 输出图象到页面

ImageIO.write(image, "JPEG", responseOutputStream);

// 以下关闭输入流!

responseOutputStream.flush();

responseOutputStream.close();

}

static Color getRandColor(int fc, int bc) {

// 给定范围获得随机颜色

Random random = new Random();

if (fc > 255)

fc = 255;

if (bc > 255)

bc = 255;

int r = fc + random.nextInt(bc - fc);

int g = fc + random.nextInt(bc - fc);

int b = fc + random.nextInt(bc - fc);

return new Color(r, g, b);

}

/**

* Handles the HTTP GET method.

*

* @param request

*            servlet request

* @param response

*            servlet response

*/

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

processRequest(request, response);

}

这个是我web里用的验证码,你可以改改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Java Swing 的 Graphics2D 类来绘制验证码,并使用 Random 类来生成随机字符和颜色。以下是一个简单的示例: ```java import javax.swing.*; import java.awt.*; import java.util.Random; public class CaptchaPanel extends JPanel { // 验证码字符集 private static final String CHAR_SET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; // 验证码长度 private static final int CODE_LENGTH = 4; @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; // 设置背景颜色 g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, getWidth(), getHeight()); // 生成随机验证码 Random random = new Random(); StringBuilder code = new StringBuilder(); for (int i = 0; i < CODE_LENGTH; i++) { code.append(CHAR_SET.charAt(random.nextInt(CHAR_SET.length()))); } // 绘制验证码 int x = 10; int y = 20; for (int i = 0; i < CODE_LENGTH; i++) { // 设置随机颜色 g2d.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256))); // 设置随机字体 g2d.setFont(new Font(Font.SANS_SERIF, Font.BOLD, random.nextInt(10) + 20)); g2d.drawString(String.valueOf(code.charAt(i)), x, y); x += 30; } // 绘制干扰线 for (int i = 0; i < 10; i++) { g2d.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256))); g2d.drawLine(random.nextInt(getWidth()), random.nextInt(getHeight()), random.nextInt(getWidth()), random.nextInt(getHeight())); } } public static void main(String[] args) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 150); frame.setLocationRelativeTo(null); frame.add(new CaptchaPanel()); frame.setVisible(true); } } ``` 在这个示例中,我们首先设置了背景颜色为白色,然后使用 Random 类生成随机验证码。接着,我们使用 Graphics2D 类的 drawString() 方法绘制验证码,并使用随机颜色和字体。最后,我们使用 drawLine() 方法绘制干扰线,增加验证码的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值