Generate random verification code with java

Generate random verification code with java

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


@SuppressWarnings("all")
@WebServlet("/code.jpg")
public class CodeServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	// 图片宽度和高度
	int width = 130;
	int height = 39; 
	// 创建用于保存图片信息的缓冲区对象
	BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
	Graphics g = image.getGraphics(); // 获取画笔
	g.setColor(new Color(191, 234, 198)); // 设置画笔颜色
	g.fillRect(0, 0, width, height); // 填充背景颜色
	
	g.setColor(new Color(0, 0, 255)); // 重新设置画笔颜色
	g.drawRect(0, 0, width - 1, height - 1); // 绘制边框
	
	Random r = new Random(); // 创建随机数对象
	
	// 添加干扰线
	for (int i = 0; i < 15; i++) {
		g.setColor(new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255))); // 重新设置画笔颜色
		g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width), r.nextInt(height));
	}
	
	// 生成验证码的数据
	String data = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789";
	int length = data.length();
	String capstr = "";
	g.setFont(new Font("宋体", Font.BOLD, 35)); // 设置字体
	for (int i = 0; i < 4; i++) {
		int index = r.nextInt(length);
		String str = data.charAt(index) + "";
		capstr += str;
		g.setColor(new Color(r.nextInt(200), r.nextInt(200), r.nextInt(200))); // 重新设置画笔颜色
		g.drawString(str, 10 + (i * 28), 30); // 将字符写入图片
	}
	System.out.println(capstr);
	// 将生成的验证码存储到session中,以便在注册时,在后台进行校验
	HttpSession session = request.getSession();
	session.setAttribute("code", capstr);
	
	g.dispose(); // 释放资源
	response.setContentType("image/jpg"); // 设置响应类型
	
	OutputStream strm = response.getOutputStream(); // 输出流
	ImageIO.write(image, "jpg", strm); // 将图片写到输出流
	strm.close(); // 关闭输出流
}
}
Published 5 original articles · Likes0 · Visits 190

Guess you like

Origin blog.csdn.net/jack19950729/article/details/99588510