`

验证码生成之JavaServlet-Edition

阅读更多

概述:验证码对于各大论坛的信息验证功能来说已经成了不可或缺的一部分,至于其作用,本人就不在这里赘述。近日,本人在自己也实现了一个JavaServlet版的验证码,现把其源代码贴出来,请各位不吝赐教。

实现机理:生成一串随机数,其中可以是固定值,可以是可变值,本人的随机数长度固定为4(可根据您自己的程序进行改变),等到随机字符串产生后,将此字符串打乱成字符,然后一个一个的把字符画到输出流里,其中每个字符的颜色即RGB值也是随机产生,在画面的同时,再产生若干条干扰线,以防止验证码被破解。然后把图象流输出到客户端。其中客户端的HTML代码利用img标签实现。

Servlet源代码:

java 代码
  1. public void doGet(HttpServletRequest request, HttpServletResponse response)   
  2.             throws ServletException, IOException {   
  3.         //设置响应格式   
  4.         response.setContentType("image/jpeg");   
  5.         //定义一个BufferedImage对象 其构造函数属性参照API   
  6.         BufferedImage image = new BufferedImage(80,20,BufferedImage.SCALE_SMOOTH);   
  7.         //根据上述对象产生一个Graphics2D上下文   
  8.         Graphics2D graphics = image.createGraphics();   
  9.         //将上下文颜色设置为白色   
  10.         graphics.setColor(Color.WHITE);   
  11.         graphics.fillRect(00,100,20);   
  12.         //设置书写字体   
  13.         graphics.setFont(new Font("Roman",Font.CENTER_BASELINE,22));   
  14.         //randomString方法见后面,负责产生由4个字符组成的字符串   
  15.         String randomStr=randomString(4);   
  16.         for(int i=0;i
  17.         //随机设置上下文颜色   
  18.         graphics.setColor(new Color(new Random().nextInt(250),new Random().nextInt(250),   
  19.                     new Random().nextInt(250)));   
  20.         //按字符把其画出来   
  21.         graphics.drawString(randomStr.substring(i,i+1),15*i,20);   
  22.         //产生干扰线   
  23.         graphics.drawLine(0,0,11);   
  24.         }   
  25.         //禁止缓冲代码,没有这段的话则不能进行更新显示,删除效果请自行测试   
  26.         response.setHeader("Prama""no-cache");   
  27.         response.setHeader("Coche-Control""no-cache");   
  28.         response.setDateHeader("Expires"0);      
  29.         //写入到客户端    
  30.         ImageIO.write(image,"jpeg",response.getOutputStream());   
  31.     }  

 

randomString方法源代码:

java 代码

     //number 产生有number个字符组成的字符串
  1. public String randomString(int number){ 
  2.     //字符串的内容组成  
  3.     String str="1234567890qwertyuioplkjhgfdsazxcvbnm";   
  4.     char[] chars=str.toCharArray();   
  5.     int length=chars.length;   
  6.     StringBuilder sb=new StringBuilder();   
  7.     Random random=new Random();   
  8.     //随机生成number个字符   
  9.     for(int i=0;i
  10.         //把单个字符转换成字符串然后追加到已经产生的字符串中
  11.         sb.append(new String(new Character(chars[random.nextInt(length)]).toString()));   
  12.     }   
  13.     return sb.toString();   
  14. }  
Jsp文件源代码:

jsp 代码
  1.       
  2.   <!---->    
  3.   <img src="<!---->/random"  id="PHOTO"       
  4.   onclick="document.getElementById('PHOTO').src='<!---->/random';return false;"/>      
  5.   <a href="<!---->/switch.do?prefix=/demo&page=/show.jsp">qqqa>      
  6.   <br>      
  7.   <input type="button" onclick="javascript:document.getElementById('photo').src='<!---->/random';return false;"     
  8.     value="看不清楚?">      
分享到:
评论
3 楼 mhqawjh 2007-09-28  
更正:randomString方法的完整for循环。
for(int i=0;i<number;i++){
sb.append(new String(new Character(chars[random.nextInt(length)]).toString()));
}
2 楼 yondy 2007-09-28  
for循环的条件不完整
不知道是不是javaeye程序的问题
1 楼 pikachu 2007-09-28  
吹毛求疵的一点:验证码怎么没有保存下来?

相关推荐

    java-servlet-连接mysql-数据库.docx

    java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-...

    jakarta.servlet-api-4.0.4-API文档-中文版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    javax.servlet-api-4.0.0-API文档-中文版.zip

    赠送jar包:javax.servlet-api-4.0.0.jar; 赠送原API文档:javax.servlet-api-4.0.0-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.0-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.0.pom; ...

    thrift 生成的java包servlet-api-2.5.jar

    thrift 生成的java包servlet-api-2.5.jar

    javax.servlet-api-3.0.1.jar中文文档.zip

    javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...

    javax.servlet-api-4.0.1-API文档-中英对照版.zip

    赠送jar包:javax.servlet-api-4.0.1.jar; 赠送原API文档:javax.servlet-api-4.0.1-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.1-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.1.pom; ...

    servlet-api

    Tomcat中lib下的servlet-api包。

    jakarta.servlet-api-4.0.4-API文档-中英对照版.zip

    赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....

    javax.servlet-api-3.1.0.jar中文文档.zip

    javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...

    javax.servlet-api-3.1.0.jar

    javax.servlet-api-3.1.0.jar,处理找不到servlet JAR的问题

    javax.servlet-api-4.0.1.jar中文文档.zip

    javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...

    Java servlet 自动生成 图片验证码 生成 Java源码

    Java servlet 自动生成 图片验证码 生成 Java源码

    javax.servlet-api-4.0.0-API文档-中英对照版.zip

    赠送jar包:javax.servlet-api-4.0.0.jar; 赠送原API文档:javax.servlet-api-4.0.0-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.0-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.0.pom; ...

    javax.servlet-api.jar.zip

    文件中包含javax.servlet-api-3.0.1.jar,javax.servlet-api-3.1.0.jar,javax.servlet-api-4.0.0.jar,用来处理java项目运行中找不到servlet JAR的问题,需要的朋友可以下载

    Java servlet-api应用文档

    Servlet API被分成两个软件包:javax.servlet-不对应HTTP的通用的软件包和javax.servlet.http-对应HTTP的软件包。这两个软件包的同时存在使得Java Servlet API能够适应将来的其他请求-响应的协议。API包含了两个...

    servlet-api-3.0.jar包

    servlet-api-3.0.jar

    Java-Servlet-API.zip

    Java-Servlet-API

    javax.servlet-api-4.0.1-API文档-中文版.zip

    赠送jar包:javax.servlet-api-4.0.1.jar; 赠送原API文档:javax.servlet-api-4.0.1-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.1-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.1.pom; ...

Global site tag (gtag.js) - Google Analytics