validate.java

来自「基于j2ee的物流软件」· Java 代码 · 共 74 行

JAVA
74
字号
package com.wuliu.doservlet;

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Validate implements Service {
	
	public String doService(HttpServletRequest request,
			HttpServletResponse response) {
		// 定义Image对象
		BufferedImage img = new BufferedImage(50, 25,
				BufferedImage.TYPE_INT_RGB);
		// 获取绘图对象
		Graphics g = img.getGraphics();
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, img.getWidth(), img.getHeight());
		Random r = new Random();
		StringBuffer sb = new StringBuffer(); // 存放随机数的字符串
		// 画噪点
		for (int i = 0; i < 70; i++) {
			Color color = new Color(r.nextInt(255), r.nextInt(255), r
					.nextInt(255));
			g.setColor(color);
			g.drawOval(r.nextInt(img.getWidth()), r.nextInt(img.getHeight()),
					0, 0);
		}
		// 实例化字体对象
		Font font = new Font("Arial", Font.PLAIN, 20);
		g.setFont(font);
		// 定义存放随机数的字符串
		String str = null;
		// 产生4个随机数
		for (int i = 0; i < 4; i++) {
			// 产生随机颜色
			Color color = new Color(r.nextInt(255), r.nextInt(255), r
					.nextInt(255));
			// 设置颜色
			g.setColor(color);
			// 随机的确定使用字母、数字
			if (r.nextInt(2) == 0) {
				// 把随机产生的数字转换成字符串
				str = String.valueOf(r.nextInt(10));
			} else {
				// 把随机产生的数字转换成字符
				str = String.valueOf(Character.toChars(65 + r.nextInt(26)));
			}
			// 把产生的字符或数字画到图片 
			g.drawString(str, 3 + 10 * i + r.nextInt(5), 15 + r.nextInt(8));
			// 保存随机数到StringBuffer对象
			sb.append(str);
		}
		// 把随机数保存到session中
		request.getSession().setAttribute("code", sb.toString());
		// 获取输出流
		OutputStream os;
		try {
			os = response.getOutputStream();
			// 把图片以JPEG的格式输出
			ImageIO.write(img, "JPEG", os);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?