生成数字和字母组合的验证码

来源:互联网 发布:滴滴截图造假软件 编辑:程序博客网 时间:2024/05/17 09:12

//生成数字和字母组合的验证码
public class ResponseDemo3 extends HttpServlet {
 private static final long serialVersionUID =1L;
 private int WIDTH=140;
 private int HEIGHT=35;
 public void doGet(HttpServletRequest request,HttpServletResponse response)
   throwsServletException, IOException {
  BufferedImage image=newBufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
  Graphicsg=image.getGraphics();
  
  //1、设置背景色
  setBackGround(g);
  
  //2、设置边框
  serBorder(g);
  
  //3、画干扰线
  drawRandomLine(g);
  
  //4、写随机数
  drawRandomNum((Graphics2D)g);
  
  //禁止图像缓存。  
       response.setHeader("Pragma", "no-cache"); 
       response.setHeader("Cache-Control","no-cache"); 
       response.setDateHeader("Expires", 0); 
  
  //5、图形写给浏览器
  response.setContentType("text/jpeg");
  ImageIO.write(image, "jpg",response.getOutputStream());
 }
 
 

 private void setBackGround(Graphics g) {
  g.setColor(getRandColor(190,230));
  g.fillRect(0, 0, WIDTH,HEIGHT);
 }
 
 private void serBorder(Graphics g) {
  g.setColor(Color.BLACK);
  g.drawRect(1, 1, WIDTH-2,HEIGHT-2);
 }
 
 private void drawRandomLine(Graphics g) {
  g.setColor(Color.GRAY);
  for(inti=0;i<4;i++){
   int x1=newRandom().nextInt(WIDTH);
   int y1=newRandom().nextInt(HEIGHT);
   
   int x2=newRandom().nextInt(WIDTH);
   int y2=newRandom().nextInt(HEIGHT);
   
   g.drawLine(x1,y1, x2, y2);
  }
 }

 private void drawRandomNum(Graphics2D g){
  g.setColor(getRandColor(20,80));
  
  //设置字体的大小
  g.setFont(newFont("宋体",Font.BOLD,30));
  Stringbase="abcdefghijklmnopqrstuvwxyz0123456789";
  int x=10;
  for(inti=0;i<6;i++){
   intdegree=new Random().nextInt()0;//角度范围在-30-30
   Stringch=base.charAt(new Random().nextInt(base.length()))+"";
   
   //设置旋转角度
   g.rotate(degree*Math.PI/180,x,20);
   g.drawString(ch,x, 25);
   
   //每次旋转完后再把角度设置成原来的
   g.rotate(-degree*Math.PI/180,x,20);
   x+=20;
  }
 }

 //给定范围获得随机颜色
 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 void doPost(HttpServletRequest request,HttpServletResponse response)
   throwsServletException, IOException {

  doGet(request,response);
 }

}

0 0
原创粉丝点击