利用Java编写一个随机生成验证码功能

  介绍

这篇文章给大家介绍利用Java编写一个随机生成验证码功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

<强> Java实现随机验证码功能简单实例

现在许多系统的注册,登录或者发布信息模块都添加的随机码功能,就是为了避免自动注册程序或者自动发布程序的使用。

验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器会话保存的不同,则认为提交信息无效。为了避免自动程序分析解析图片,通常会在图片上随机生成一些干扰线或者将字符进行扭曲,增加自动识别的难度。

在这里,我们使用servlet来实现随机验证码的实现。

<强>,实现代码:

包com.servlet;
  
  进口java.awt.Color;
  进口属性;
  java . awt . graphics2d进口;
  进口java.awt.image.BufferedImage;
  进口java.util.Random;
  
  进口javax.imageio.ImageIO;
  进口javax.servlet.ServletException;
  进口javax.servlet.ServletOutputStream;
  进口javax.servlet.http.HttpServlet;
  进口javax.servlet.http.HttpServletRequest;
  进口javax.servlet.http.HttpServletResponse;
  进口javax.servlet.http.HttpSession;/* *
  *生成随机验证码
  * @author bitiliu
  *
  */公共ValidateCodeServlet扩展HttpServlet类
  {
  
  私有静态最终长serialVersionUID l=1;//验证码图片的宽度。
  私人int宽度=60;//验证码图片的高度。
  私人int高度=20;//验证码字符个数
  私人int codeCount=4;
  
  
  私人int x=0;//字体高度
  私人int fontHeight;
  私人int codeY;
  
  char [] codeSequence={& # 39;一个# 39;& # 39;b # 39;, & # 39; c # 39;, & # 39; d # 39;, & # 39; e # 39;, & # 39; f # 39;, & # 39;舌鳎# 39;,& # 39;h # 39;, & # 39;我# 39;,& # 39;强生公司,,
  & # 39;k # 39; & # 39; l # 39; & # 39;猴# 39;,& # 39;n # 39; & # 39; o # 39;, & # 39; p # 39; & # 39;提问# 39;,& # 39;" # 39;& # 39;& # 39;,& # 39;t # 39; & # 39; u # 39; & # 39; v # 39;, & # 39; w # 39;
  & # 39;x # 39; & # 39; y # 39; & # 39; z # 39;, & # 39; 0 & # 39; & # 39; 1 & # 39; & # 39; 2 & # 39; & # 39; 3 & # 39; & # 39; 4 & # 39; & # 39; 5 & # 39; & # 39; 6 & # 39; & # 39; 7 & # 39; & # 39; 8 & # 39; & # 39; 9 & # 39;};/* *
  *初始化验证图片属性
  */公共空间init()抛出ServletException
  {//从web . xml中获取初始信息//宽度
  字符串strWidth=this.getInitParameter (“width");//高度
  字符串strHeight=this.getInitParameter (“height");//字符个数
  字符串strCodeCount=this.getInitParameter (“codeCount");//将配置的信息转换成数的值
  试一试
  {
  如果(strWidth !=零,,strWidth.length () !=0)
  {
  宽度=Integer.parseInt (strWidth);
  }
  如果(strHeight !=零,,strHeight.length () !=0)
  {
  身高=Integer.parseInt (strHeight);
  }
  如果(strCodeCount !=零,,strCodeCount.length () !=0)
  {
  codeCount=Integer.parseInt (strCodeCount);
  }
  }
  抓住(NumberFormatException e)
  {}
  
  x=宽/(codeCount + 1);
  fontHeight=身高2;
  codeY=高是4;
  
  }
  
  保护无效服务(HttpServletRequest点播,HttpServletResponse resp)
  抛出ServletException, io。IOException {//定义图像缓冲区
  BufferedImage buffImg=new BufferedImage (
  宽度,高度,BufferedImage.TYPE_INT_RGB);
  Graphics2D g=buffImg.createGraphics ();//创建一个随机数生成器类
  随机随机=new随机();//将图像填充为白色
  g.setColor (Color.WHITE);
  g。fillRect(0, 0,宽度、高度);//创建字体,字体的大小应该根据图片的高度来定。
  字体字体=new字体(“Fixedsys",字体。平原,fontHeight);//设置字体。
  g.setFont(字体);//画边框。
  g.setColor (Color.BLACK);
  g。宽度绘制矩形(0,0,- 1,- 1)高度;//随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
  g.setColor (Color.BLACK);
  for (int i=0;我& lt;160;我+ +)
  {
  int x=random.nextInt(宽度);
  int y=random.nextInt(高度);
  int xl=random.nextInt (12);
  int yl=random.nextInt (12);
  g。画直线(x + xl x, y, y +黄);
  }//randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
  StringBuffer randomCode=new StringBuffer ();
  int红色=0,绿色=0,蓝色=0;//随机产生codeCount数字的验证码。
  for (int i=0;我& lt;codeCount;我+ +){//得到随机产生的验证码数字。
  字符串strRand=String.valueOf (codeSequence [random.nextInt (36)]);//产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
  红色=random.nextInt (255);
  绿色=random.nextInt (255);
  蓝色=random.nextInt (255);//用随机产生的颜色将验证码绘制到图像中。
  g。改变颜色(新颜色(红、绿、蓝));
  g。拉带(strRand (i + 1) * x, codeY);//将产生的四个随机数组合在一起。
  randomCode.append (strRand);
  }//将四位数字的验证码保存到会话中。
  HttpSession会话=req.getSession ();
  session.setAttribute (“validateCode" randomCode.toString ());//禁止图像缓存。
  resp.setHeader (“Pragma",“no-cache");
  resp.setHeader (“Cache-Control",“no-cache");
  resp.setDateHeader (“Expires" 0);
  
  resp.setContentType(“图像/jpeg");//将图像输出到Servlet输出流中。
  ServletOutputStream sos=resp.getOutputStream ();
  ImageIO。写(buffImg“jpeg", sos);
  sos.close ();
  }
  
  }

利用Java编写一个随机生成验证码功能