java 验证码 public class RandomImage { //字符的位数 public final int STRING_LENGTH = 6; public String randStr = ""; public Color getRandColor(int fc, int bc) { //给定范围获得随机颜色 Random random = new Random(); if (fc 25
public class RandomImage { //字符的位数 public final int STRING_LENGTH = 6; public String randStr = ""; public 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); } public BufferedImage creatImage() { // 在内存中创建图象 int width = 83, height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); //生成随机类 Random random = new Random(); // 设定背景色 g.setColor(new Color(255,244,175));//(getRandColor(200, 250)); g.fillRect(0, 0, width, height); //设定字体 // g.setFont(new Font("Times New Roman", Font.PLAIN, 18)); Font newFont = g.getFont(); g.setFont(new Font(newFont.getName(), Font.PLAIN, 18)); // 随机产生100条干扰线,使图象中的认证码不易被其它程序探测到 g.setColor(getRandColor(160, 200)); for (int i = 0; i < 100; 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); } //产生随机数,包含大小写字母和数字 //修改此处可以支持数字,字母,或者字母数字组合 randStr = RandomStringUtils.randomNumeric(this.STRING_LENGTH); for (int i = 0; i < this.STRING_LENGTH; i++) { String rand = String.valueOf(randStr.charAt(i)); // 将认证码显示到图象中 g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110))); g.drawString(rand, 13 * i + 6, 16); } // 图象生效 g.dispose(); return image; } } 输出图片: protected void action(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub RandomImage rImage=new RandomImage(); HttpSession session=request.getSession(); //图片格式 response.setContentType("image/jpeg"); //不缓存 response.addHeader("pragma","NO-cache"); response.addHeader("Cache-Control","no-cache"); response.addDateHeader("Expries",0); //ImageIO.write(rImage.creatImage(), "JPEG", response.getOutputStream()); JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(response.getOutputStream()); encoder.encode(rImage.creatImage()); //放进session session.setAttribute("rand",rImage.randStr);