验证码的生成

public static void ImageCodeMaker(){
			// 定义图片的宽度和高度
			int width = 90, height = 40;
			// 创建一个图像对象
			BufferedImage image = new BufferedImage(width, height,
					BufferedImage.TYPE_INT_RGB);
			// 得到图像的环境对象
			Graphics g = image.createGraphics();
			
			g.setColor(getRandColor(180, 250));  
		    g.fillRect(0, 0, width, height);  
		    
			Random random = new Random();
			
		    for (int i = 0; i < 5; i++) {
				g.setColor(getRandColor(50, 100));
				int x = random.nextInt(width);
				int y = random.nextInt(height);
				g.drawOval(x, y, 4, 4);
			}
			// 设置字体,下面准备画随机数
			g.setFont(new Font("", Font.PLAIN, 40));
			// 随机数字符串
			String sRand = "";
			for (int i = 0; i < 4; i++) {
				// 生成四个数字字符
				String rand = getRandomChar();; 
						//String.valueOf(random.nextInt(10));
				sRand += rand;
				// 生成随机颜色
				g.setColor(new Color(20 + random.nextInt(80), 20 + random
						.nextInt(100), 20 + random.nextInt(90)));
				// 将随机数字画在图像上
				g.drawString(rand, (17 + random.nextInt(3)) * i + 8, 34);

					// 生成干扰线
					for (int k = 0; k < 12; k++) {
						int x = random.nextInt(width);
						int y = random.nextInt(height);
						int xl = random.nextInt(9);
						int yl = random.nextInt(9);
						g.drawLine(x, y, x + xl, y + yl);
					}
			}
			System.out.println(sRand);
			
	}

	private static String getRandomChar() {

		String ret ="";
		
		//数字和字母的组合
		 String baseNumLetter = "0123456789ABCDEFGHJKLMNOPQRSTUVWXYZ";
		//纯数字
		// String baseNum = "0123456789";
		 //纯字母
		// String baseLetter = "ABCDEFGHJKLMNOPQRSTUVWXYZ";
		 
		// ret = baseLetter.charAt(new Random().nextInt(baseLetter.length()))+"";
		 
		// ret = baseNum.charAt(new Random().nextInt(baseNum.length()))+"";
		 
		 ret = baseNumLetter.charAt(new Random().nextInt(baseNumLetter.length()))+"";
		 
		 
		 
		 return ret;
	}


			/**
			 * 产生一个随机的颜色
			 * 
			 * @param fc
			 *            颜色分量最小值
			 * @param bc
			 *            颜色分量最大值
			 * @return
			 */
			public 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);
			}

  转载其他文章:

在页面显示时 需要如下代码:
// 首先设置页面不缓存  
        response.setHeader("Pragma", "No-cache");  
        response.setHeader("Cache-Control", "no-cache");  
        response.setDateHeader("Expires", 0);  


 // 将生成的随机数字字符串写入Session  
        request.getSession(false).setAttribute("randcode", sRand);  
        // 使图像生效  
        g.dispose();  
        // 输出图像到页面  
        ImageIO.write(image, "JPEG", response.getOutputStream()); 

 

posted @ 2015-08-06 15:28  凉城  阅读(337)  评论(0编辑  收藏  举报