介绍
这篇文章给大家介绍利用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编写一个随机生成验证码功能