现在的位置: 首页 > 综合 > 正文

生成验证码的方法

2013年02月25日 ⁄ 综合 ⁄ 共 1881字 ⁄ 字号 评论关闭

 /**
   * 生成随机验证码
   * @return
   * @throws Exception
   */
    public ByteArrayInputStream randomYzm() throws Exception{
     
     char[] codes={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J',
       'K', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
       'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
     
     int width=62, height=20;   
     BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);   
     // 获取图形上下文   
     Graphics g = image.getGraphics();   
     // 生成随机类   
     Random random = new Random();   
     // 设定背景色   
     g.setColor(Color.WHITE);   
     g.fillRect(0, 0, width, height);   
     // 设定字体   
     g.setFont(new Font("Fixedsys",Font.PLAIN,20));   
     // 随机产生100条干扰线,使图象中的认证码不易被其它程序探测到   
     g.setColor(Color.lightGray);      
     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);   
     }   
     
     // 取随机产生的认证码(4位数字)   
     StringBuilder sRand = new StringBuilder(4);   
     for (int i=0;i<4;i++){   
     String rand=String.valueOf(codes[random.nextInt(32)]);   
//     sRand+=rand;   
     sRand.append(rand);
     // 将认证码显示到图象中   
     g.setColor(new Color(random.nextInt(55),random.nextInt(55),random.nextInt(55)));       
     // 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
     g.drawString(rand,15*i,16);   
     } 
      
     //图象生效   
     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){   
     throw new Exception("验证码图片产生出现错误");   
     }   
      
//     images=input;/* 赋值图像 */ 
     ActionContext.getContext().getSession().put("randomyzm", sRand.toString());//取得随机字符串放入HttpSession
     return input;
     }

抱歉!评论已关闭.