`
sunxboy
  • 浏览: 2880768 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Java实现随机验证码功能实例 (转)

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

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

在这里,我们使用servlet来实现随机验证码的实现。
java 代码
 
  1. package com.servlet;  
  2.   
  3. import java.awt.Color;  
  4. import java.awt.Font;  
  5. import java.awt.Graphics2D;  
  6. import java.awt.image.BufferedImage;  
  7. import java.util.Random;  
  8.   
  9. import javax.imageio.ImageIO;  
  10. import javax.servlet.ServletException;  
  11. import javax.servlet.ServletOutputStream;  
  12. import javax.servlet.http.HttpServlet;  
  13. import javax.servlet.http.HttpServletRequest;  
  14. import javax.servlet.http.HttpServletResponse;  
  15. import javax.servlet.http.HttpSession;  
  16.   
  17. /** 
  18. * 生成随机验证码 
  19. * @author bitiliu 
  20. * 
  21. */  
  22. public class ValidateCodeServlet extends HttpServlet  
  23. {  
  24.   
  25. private static final long serialVersionUID = 1L;  
  26.   
  27. //验证码图片的宽度。  
  28. private int width=60;  
  29. //验证码图片的高度。  
  30. private int height=20;  
  31. //验证码字符个数  
  32. private int codeCount=4;  
  33.   
  34.   
  35. private int x=0;  
  36. //字体高度  
  37. private int fontHeight;  
  38. private int codeY;  
  39.   
  40. char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',  
  41. 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',  
  42. 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };  
  43.   
  44. /** 
  45. * 初始化验证图片属性 
  46. */  
  47. public void init() throws ServletException  
  48. {  
  49. //从web.xml中获取初始信息  
  50. //宽度  
  51. String strWidth=this.getInitParameter("width");  
  52. //高度  
  53. String strHeight=this.getInitParameter("height");  
  54. //字符个数  
  55. String strCodeCount=this.getInitParameter("codeCount");  
  56.   
  57. //将配置的信息转换成数值  
  58. try  
  59. {  
  60. if(strWidth!=null && strWidth.length()!=0)  
  61. {  
  62. width=Integer.parseInt(strWidth);  
  63. }  
  64. if(strHeight!=null && strHeight.length()!=0)  
  65. {  
  66. height=Integer.parseInt(strHeight);  
  67. }  
  68. if(strCodeCount!=null && strCodeCount.length()!=0)  
  69. {  
  70. codeCount=Integer.parseInt(strCodeCount);  
  71. }  
  72. }  
  73. catch(NumberFormatException e)  
  74. {}  
  75.   
  76. x=width/(codeCount+1);  
  77. fontHeight=height-2;  
  78. codeY=height-4;  
  79.   
  80. }  
  81.   
  82. protected void service(HttpServletRequest req, HttpServletResponse resp)  
  83. throws ServletException, java.io.IOException {  
  84.   
  85. //定义图像buffer  
  86. BufferedImage buffImg = new BufferedImage(  
  87. width, height,BufferedImage.TYPE_INT_RGB);  
  88. Graphics2D g = buffImg.createGraphics();  
  89.   
  90. //创建一个随机数生成器类  
  91. Random random = new Random();  
  92.   
  93. //将图像填充为白色  
  94. g.setColor(Color.WHITE);  
  95. g.fillRect(00, width, height);  
  96.   
  97. //创建字体,字体的大小应该根据图片的高度来定。  
  98. Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);  
  99. //设置字体。  
  100. g.setFont(font);  
  101.   
  102. //画边框。  
  103. g.setColor(Color.BLACK);  
  104. g.drawRect(00, width - 1, height - 1);  
  105.   
  106. //随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。  
  107. g.setColor(Color.BLACK);  
  108. for(int i = 0; i < 160; i++)  
  109. {  
  110. int x = random.nextInt(width);  
  111. int y = random.nextInt(height);  
  112. int xl = random.nextInt(12);  
  113. int yl = random.nextInt(12);  
  114. g.drawLine(x, y, x + xl, y + yl);  
  115. }  
  116.   
  117. //randomCode用于保存随机产生的验证码,以便用户登录后进行验证。  
  118. StringBuffer randomCode = new StringBuffer();  
  119. int red = 0, green = 0, blue = 0;  
  120.   
  121. //随机产生codeCount数字的验证码。  
  122. for (int i = 0; i < codeCount; i++) {  
  123. //得到随机产生的验证码数字。  
  124. String strRand = String.valueOf(codeSequence[random.nextInt(36)]);  
  125. //产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。  
  126. red = random.nextInt(255);  
  127. green = random.nextInt(255);  
  128. blue = random.nextInt(255);  
  129.   
  130. //用随机产生的颜色将验证码绘制到图像中。  
  131. g.setColor(new Color(red, green, blue));  
  132. g.drawString(strRand, (i + 1) * x, codeY);  
  133.   
  134. //将产生的四个随机数组合在一起。  
  135. randomCode.append(strRand);  
  136. }  
  137. // 将四位数字的验证码保存到Session中。  
  138. HttpSession session = req.getSession();  
  139. session.setAttribute("validateCode", randomCode.toString());  
  140.   
  141. // 禁止图像缓存。  
  142. resp.setHeader("Pragma""no-cache");  
  143. resp.setHeader("Cache-Control""no-cache");  
  144. resp.setDateHeader("Expires"0);  
  145.   
  146. resp.setContentType("image/jpeg");  
  147.   
  148. //将图像输出到Servlet输出流中。  
  149. ServletOutputStream sos = resp.getOutputStream();  
  150. ImageIO.write(buffImg, "jpeg", sos);  
  151. sos.close();  
  152. }  
  153.   
  154. }   

需要在web.xml中声明servlet
xml 代码
  1. <servlet>  
  2. <servlet-name>ValidateCodeServlet</servlet-name>  
  3. <servlet-class>com.servlet.ValidateCodeServlet</servlet-class>  
  4. <init-param>  
  5. <param-name>width</param-name>  
  6. <param-value>200</param-value>  
  7. </init-param>  
  8. <init-param>  
  9. <param-name>height</param-name>  
  10. <param-value>80</param-value>  
  11. </init-param>  
  12. <init-param>  
  13. <param-name>codeCount</param-name>  
  14. <param-value>5</param-value>  
  15. </init-param>  
  16. </servlet>  
  17.   
  18. <servlet-mapping>  
  19. <servlet-name>ValidateCodeServlet</servlet-name>  
  20. <url-pattern>/validateCodeServlet</url-pattern>  
  21. </servlet-mapping>   

用户提交后就可以将用户输入的验证码与session中保存的字符串进行比对,达到验证的效果。
分享到:
评论

相关推荐

    Java实现随机验证码功能实例

    验证码实际上就是随机选择一些字符以图片的形式展现在页面上,如果进行提交操作的同时需要将图片上的字符同时提交,如果提交的字符与服务器session保存的不同,则认为提交...本文介绍了使用servlet来实现随机验证码。

    Java实现随机验证码功能实例代码

    在本文中,我们将深入探讨如何使用Java编程语言实现一个基于Servlet的随机验证码功能。验证码的主要目的是防止自动化程序(如机器人或爬虫)进行非法操作,例如自动注册、登录或发布信息。通过创建一种图片形式的...

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

    Java 实现随机验证码功能简单实例 Java 实现随机验证码功能简单实例是指在Java中实现一个简单的随机验证码功能,以避免自动注册程序或者自动发布程序的使用。在这个示例中,我们使用servlet来实现随机验证码的生成...

    java随机验证码生成实现实例代码

    Java随机验证码生成实现实例代码 Java随机验证码生成实现实例代码主要介绍了java随机验证码生成实现实例代码的相关资料。下面是对标题和描述中所说的知识点的详细解释: Java随机验证码生成 Java随机验证码生成是...

    Java后端产生验证码后台验证功能的实现代码

    本文主要介绍了Java后台产生验证码后台验证功能的实现代码,结合实例代码,详细地介绍了验证码的生成和验证过程。 Java后台验证码生成的实现主要包括以下几个步骤: 1. 生成验证码图片:使用BufferedImage类生成...

    java web加法验证码实例

    在Java Web开发中,验证码是一种常见的安全机制,用于防止自动化的机器人或恶意用户进行非法操作。...希望这个加法验证码实例对你的项目开发有所帮助,同时也提醒你在实际应用中不断探索和优化安全策略。

    Java案例之随机验证码功能实现实例

    "Java案例之随机验证码功能实现实例" 该资源主要介绍了Java实现随机验证码功能的实例,通过生成四位不重复的验证码,演示了Java中数组、Random函数和字符串操作的使用。 知识点一:数组 * 数组的定义:在Java中,...

    java生成随机加减法的图形验证码

    本话题主要关注如何使用Java生成包含随机加减法问题的图形验证码。这种验证码不仅增加了安全性,还为用户提供了验证他们是否为人类的互动方式。 首先,`IdentifyingCode.java`可能是一个类,它代表验证码对象,包含...

    JSP随机验证码实例源码

    在这个JSP随机验证码实例中,我们将深入探讨其工作原理、实现方法以及源码解析。 验证码的核心是生成一组随机的、难以被程序识别的字符或数字组合。在JSP(JavaServer Pages)环境中,我们可以利用Java的强大功能来...

    java随机动态生成汉字验证码图片的实例代码分享

    下面将详细介绍这个Java实现汉字验证码的实例。 首先,生成汉字验证码的核心思想是结合随机性和图像处理技术。验证码通常包含一些随机生成的字符,这些字符可能是字母、数字或者是汉字,目的是让人类用户能够识别但...

    JSP实现验证码功能.zip

    在"Java实现随机验证码功能实例.files"目录下,可能包含了一些辅助资源,如字体文件、样式表或图片,这些资源可能在生成验证码图像时用到,以提供不同的视觉效果。 总的来说,JSP实现验证码功能是通过Java后端生成...

    java实现——登录验证码实例

    总的来说,创建Java验证码实例涉及字符生成、图像处理和用户验证等多个环节,这不仅锻炼了开发者在图形编程和安全方面的技能,也是理解Web应用程序交互流程的良好实践。通过不断优化验证码的生成算法和图像效果,...

    java实现动态验证码的效果

    Java 实现动态验证码效果是一种常见的安全机制,...在`java101`这个文件中,可能包含了实现以上功能的源代码,可以作为学习和参考的实例。记得在实际操作时,结合代码理解每个步骤的实现逻辑,并根据项目需求进行调整。

    java web实现手机短信验证码登录实例源码.rar

    在这个"java web实现手机短信验证码登录实例源码"中,我们可以深入理解如何在Web应用中集成手机短信验证码功能,以增强用户账户的安全性。 首先,短信验证码登录是现代Web应用中常见的安全机制,它通过发送一个一次...

    Java自制验证码实例

    总结来说,Java自制验证码实例展示了如何使用Servlet和Java的图形处理能力来创建安全的验证码系统。通过自定义验证码的属性,如长度、字符集和视觉效果,我们可以定制适合不同应用场景的验证码,从而有效防止自动化...

    Java产生验证码实例

    在Java开发中,验证码是一种常见的安全机制,用于防止自动化脚本或者机器人进行恶意操作,比如注册、登录等。本文将详细讲解如何在J2EE环境中生成验证码,并涉及到使用Session来存储和验证验证码。 首先,验证码的...

    基于Java随机生成手机短信验证码的实例代码

    Java随机生成手机短信验证码是目前许多应用程序和网站所需的功能,通过Java语言可以轻松地实现随机生成手机短信验证码。下面我们将详细介绍基于Java随机生成手机短信验证码的实例代码。 一、Java随机生成手机短信...

    Java 简易图形验证码实例源码

    这个"Java简易图形验证码实例源码"提供了一个实现多种类型的验证码,包括gif动画、中文字符以及算术问题的形式,这使得验证码更具挑战性,更难被自动识别程序破解。以下是对这个实例源码中的关键知识点的详细解释: ...

    java手机验证码注册实例(ssm)

    Java手机验证码注册实例是基于Spring、SpringMVC和MyBatis(SSM)框架实现的一种常见用户注册功能。在这个实例中,我们通过发送短信验证码到用户的手机号码来验证用户身份,增强注册的安全性。以下是对这个实例涉及...

    httpsession实现验证码登录小实例

    在本文中,我们将深入探讨如何使用Java编程语言和HttpSession接口来实现一个简单的验证码登录系统。验证码(CAPTCHA)是一种防止恶意机器人或自动化程序非法访问网站的安全机制,它要求用户输入图片上显示的一组随机...

Global site tag (gtag.js) - Google Analytics