private void init() {      
	// 在内存中创建图片  
		int width=85, height=20;      
		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);      
	// 获取图片上下文
		Graphics g = image.getGraphics();      
	// 生成随机类
		Random random = new Random();      
	// 设定背景色  
		g.setColor(getRandColor(200,250));      
		g.fillRect(0, 0, width, height);      
	// 设定字体
		g.setFont(new Font("Times New Roman",Font.PLAIN,18));      
	// 随机产生155条干扰线，是图片中验证码不易被其他程序探测到      
		g.setColor(getRandColor(160,200));      
		for (int i=0;i<155;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);      
		}      
	// 随机产生的认证呢（位数可以调整）
		String sRand="";      
		for (int i=0;i<4;i++){      
			String rand=String.valueOf(random.nextInt(10));      
			sRand+=rand;      
	// 将认证码显示到图象中      
			g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));      
	//调用函数出来的颜色相同，可能是因为种子太接近，所以只能直接生成    
			g.drawString(rand,13*i+6,16);      
		}     
	//赋值验证码     
	this.str=sRand;        
	//图象生效      
	g.dispose();      
	ByteArrayInputStream input=null;      
	ByteArrayOutputStream output = new ByteArrayOutputStream();      
	
	try{      
		ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);      
		ImageIO.write(image, "JPEG", imageOut);      
		imageOut.close();      
		input = new ByteArrayInputStream(output.toByteArray());      
	}catch(Exception e){      
		System.out.println("验证码图片产生出现错误："+e.toString());      
	}      
	    
	this.image=input;/* 赋值图像 */      
	}