package org.hepx.jgt.common.captcha; import org.hepx.jgt.common.random.RandomGenerater; import org.hepx.jgt.common.random.RodomType; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.image.BufferedImage; /** * 验证码生成器 * * @author: Koala * @Date: 14-8-21 下午5:18 * @Version: 1.0 */ public class CaptchaGenerater { private static int WIDTH = 100; private static int HEIGHT = 40; private static int NUM = 4; private static int RED = 240; private static int GREEN = 238; private static int BLUE = 229; /** * 生成默认为4位数字的验证码 * @param request * @return */ public static BufferedImage generateNumeric(HttpServletRequest request) { return generateNumeric(NUM,request); } /** * 生成指定长度数字的验证码 * @param count * @param request * @return */ public static BufferedImage generateNumeric(int count,HttpServletRequest request) { return generate(count,RodomType.NUM,request); } /** * 生成默认长度纯字符验证码 * @param request * @return */ public static BufferedImage generateAlphabetic(HttpServletRequest request) { return generateAlphabetic(NUM,request); } /** * 生成指定长度纯字符验证码 * @param count * @param request * @return */ public static BufferedImage generateAlphabetic(int count, HttpServletRequest request) { return generate(NUM,RodomType.CHR,request); } /** * 生成默认长度混合验证码 * @param request * @return */ public static BufferedImage generateMix(HttpServletRequest request) { return generateMix(NUM,request); } /** * 生成指定长度混合验证码 * @param count * @param request * @return */ public static BufferedImage generateMix(int count,HttpServletRequest request) { return generate(NUM,RodomType.MIX,request); } /** * 生成验证码 * @param count * @param type * @param request * @return */ private static BufferedImage generate(int count, RodomType type, HttpServletRequest request) { BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); g.setColor(new Color(RED, GREEN, BLUE)); g.fillRect(0, 0, WIDTH, HEIGHT); String code = null; switch (type) { case NUM: { code = RandomGenerater.generateNumeric(count); break; } case CHR: { code = RandomGenerater.generateAlphabetic(count); break; } case MIX: { code = RandomGenerater.generateMix(count); break; } } for (int i = 0; i < NUM; i++) { g.setColor(new Color(0, 0, 0)); g.setFont(new Font(Integer.valueOf(Font.ITALIC).toString(), Font.ITALIC, HEIGHT + 10)); g.drawString(code.substring(i, i + 1), (((i * WIDTH) / NUM) * 90) / 100, HEIGHT); } request.getSession().setAttribute("imageCode", code); return image; } }