`
lxy19791111
  • 浏览: 477111 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

校验码图片生成

    博客分类:
  • Java
阅读更多

     在B/S结构项目中,为防止别心用心的用户尝试登录通常采用生成校验码图片的方式进行控制,图片中的数字是随机生成的。以下代码是具体实现方法:   

图片生成实用类:
  1. import java.awt.*;   
  2. import java.awt.image.*;   
  3. import java.util.*;   
  4.   
  5. public class ImageCode {   
  6.   
  7.     public String sRand = "";   
  8.   
  9.     public Color getRandColor(int fc, int bc) {// 给定范围获得随机颜色   
  10.         Random random = new Random();   
  11.         if (fc > 255)   
  12.             fc = 255;   
  13.         if (bc > 255)   
  14.             bc = 255;   
  15.         int r = fc + random.nextInt(bc - fc);   
  16.         int g = fc + random.nextInt(bc - fc);   
  17.         int b = fc + random.nextInt(bc - fc);   
  18.         return new Color(r, g, b);   
  19.     }   
  20.   
  21.     public BufferedImage creatImage() {   
  22.         // 在内存中创建图象   
  23.         int width = 60, height = 20;   
  24.         BufferedImage image = new BufferedImage(width, height,   
  25.                 BufferedImage.TYPE_INT_RGB);   
  26.         // 获取图形上下文   
  27.         Graphics g = image.getGraphics();   
  28.         // 生成随机类   
  29.         Random random = new Random();   
  30.         // 设定背景色   
  31.         g.setColor(getRandColor(200250));   
  32.         g.fillRect(00, width, height);   
  33.         // 设定字体   
  34.         g.setFont(new Font("Times New Roman", Font.PLAIN, 18));   
  35.   
  36.         // 随机产生155条干扰线,   
  37.         g.setColor(getRandColor(160200));   
  38.         for (int i = 0; i < 155; i++) {   
  39.             int x = random.nextInt(width);   
  40.             int y = random.nextInt(height);   
  41.             int xl = random.nextInt(12);   
  42.             int yl = random.nextInt(12);   
  43.             g.drawLine(x, y, x + xl, y + yl);   
  44.         }   
  45.         // 取随机产生的认证码(4位数字)   
  46.         for (int i = 0; i < 4; i++) {   
  47.             String rand = String.valueOf(random.nextInt(10));   
  48.             sRand += rand;   
  49.             // 将认证码显示到图象中   
  50.             g.setColor(new Color(20 + random.nextInt(110), 20 + random   
  51.                     .nextInt(110), 20 + random.nextInt(110)));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成   
  52.             g.drawString(rand, 13 * i + 616);   
  53.         }   
  54.         // 图象生效   
  55.         g.dispose();   
  56.         return image;   
  57.     }   
  58.   
  59.     /**  
  60.      * @return Returns the sRand.  
  61.      */  
  62.     public String getSRand() {   
  63.         return sRand;   
  64.     }   
  65. }  
生成图片的servlet:
  1. import java.awt.image.BufferedImage;   
  2. import java.io.IOException;   
  3.   
  4. import javax.imageio.ImageIO;   
  5. import javax.servlet.ServletException;   
  6. import javax.servlet.http.HttpServlet;   
  7. import javax.servlet.http.HttpServletRequest;   
  8. import javax.servlet.http.HttpServletResponse;   
  9.   
  10. /**  
  11.  * 生成随机验证码图片  
  12.  *   
  13.  * @author lixy 2007-7-16 11:16:50  
  14.  *   
  15.  */  
  16. public class RandomImgCodeServlet extends HttpServlet {   
  17.   
  18.     public void doGet(HttpServletRequest request, HttpServletResponse response)   
  19.             throws ServletException, IOException {   
  20.   
  21.         response.setContentType("image/jpeg");   
  22.         ImageCode image = new ImageCode();   
  23.         response.setHeader("Pragma""No-cache");   
  24.         response.setHeader("Cache-Control""no-cache");   
  25.         response.setDateHeader("Expires"0);   
  26.         try {   
  27.             // 输出图象到页面   
  28.             BufferedImage img = image.creatImage();   
  29.             request.getSession().setAttribute("rand", image.getSRand());   
  30.             //System.out.println("image Rand Code = "+image.getSRand());   
  31.             ImageIO.write(img, "JPEG", response.getOutputStream());   
  32.             response.getOutputStream().flush();   
  33.             response.getOutputStream().close();   
  34.         } catch (Exception e) {   
  35.             System.out.println("错误:" + e);   
  36.         }   
  37.     }   
  38.   
  39. }  

       记得在web.xml中对上面这个servlet进行配置,我的配置是:   

xml 代码
  1. <servlet>      
  2.     <servlet-name>RandomImgCodeServletservlet-name>      
  3.     <servlet-class>org.lixy.util.RandomImgCodeServletservlet-class>      
  4. <servlet>         
  5. <servlet-mapping>      
  6.     <servlet-name>RandomImgCodeServletservlet-name>      
  7.     <url-pattern>/servlet/randomImgCodeServleturl-pattern>      
  8. <servlet-mapping>  

 

        在需要放置此图片的地方加入如下代码: 

html代码
  1. <img src="/servlet/randomImgCodeServlet"  class="imageRandom" height="18px"/>  

        大功告成了。。。呵呵,简单吧

分享到:
评论
4 楼 lxy19791111 2008-07-02  
老兄,知识要灵活运用...不是什么代码Copy过去就没事了!
3 楼 hqingjin83 2008-06-20  
<img src="/servlet/randomImgCodeServlet"  class="imageRandom" height="18px"/>
这个有问题吧?应为:
<img src="servlet/randomImgCodeServlet"  class="imageRandom" height="18px"/>
2 楼 hqingjin83 2008-06-20  
唔。。。验证码无法显示啊
1 楼 hqingjin83 2008-06-20  
[color=blue][/color][size=medium][/size]
很好!刚好需要,呵呵。。。

相关推荐

    动态Web校验码图片生成XVcode.zip

    XVcode,Web 动态验证码图片生成工具,用于生成随机验证码图片及返回验证码。以随机圆圈为干扰背景,增加随机前后景透明度,并提供3种gif动态图。PngGenerator :GifGenerator:Gif2Generator:Gif3Generator:该项目...

    C# 校验码生成程序

    VS2008 下校验码生成项目,可自动生成校验码,产生图片格式的校验码~~~~~~~~~~~~~~~~~~~~~~~~~~

    校验、生成 二维码

    校验、生成 二维码,主要是 图片分割后 选取二维码图片 校验。

    ASP.NET生成图片验证码

    ASP.NET生成图片验证码 ASP.NET生成图片验证码 ASP.NET生成图片验证码

    生成旋转的校验码算法(C++,gui)

    过于规则的校验码(无旋转)很容易被灌水机等程序之别,本程序生成旋转的校验码算法,c++ gui环境,很容易移植到其它开发环境

    VB生成图片格式的验证码.rar

    校验码类型可以是数字、大写字母、小写字母以及三者的混合体,支持显示弯曲排列的字符,支持背景图像选择,还可设置验证码长度等。  为了使用方便,本程序还附带有一个验证码验证模块,可验证生成的验证码是否准确...

    c# 用于校验的正则表达式总结

    c# 用于校验的正则表达式总结 c# 用于校验的正则表达式总结

    java随机生成验证码图片和校验

    使用SpringBoot搭建,jdk1.8,layui前端框架。验证码图片文字随机生成,可以选择中文、字母、数字、字母数字的组合。可以根据自己的需要进行修改。

    dotnet-HeiCaptcha一个netcore跨平台的图形验证码生成工具包

    一个.net core,跨平台的图形验证码生成工具包,基于ImageSharp。

    unity实现生成验证码(用unity自身的方法)

    都弄好的 按空格键生成验证码 !!!

    web项目里用到的工具类(正则校验、图片验证码、json解析、订单号生成)

    包括web项目里面非常常用的重复性代码,如校验用户名、手机号、身份证号、密码、等等,是否符合安全规则。 生成绝不重复的订单号。 生成图片验证码。 json解析。 全是自己手写,供大家复用。

    使用JSP生成图片格式的验证码

    // 获得session中的校验码VERIRY_CODE String verifyCode = (String)session.getAttribute("VERIRY_CODE"); OperatorLoginForm operatorLoginForm = (OperatorLoginForm)form; // 获取验证码 String ...

    php生成SessionID和图片校验码的思路和实现代码

    做一个后台登陆需要用到校验码,前台的用户跟踪需要用到SessionID,当然,默认的PHP开启了Session以后就有了一个SessionID,但是我需要自己的,并且能够存储进数据库,那么我就尝试了一下,构造了以下的函数。

    Javaweb开发中通过Servlet生成验证码图片

    主要介绍了Javaweb开发中通过Servlet生成验证码图片的相关资料,需要的朋友可以参考下

    .Net Core 实现图片验证码的实现示例

    思路很简单=》 生成一个随机数-》保存到服务端Session-》生成随机码对应的图片给前端-》登录的时候进行校验(也可以在后端进行随机码的token加密,存到Cooick里面在前端进行校验) 第一步:生成随机数 private ...

    风越.net代码生成器 v3.5

    生成提交校验码图片 ★ 搜索、列表文件以详细列表页(留言板风格)显示 生成权限,限制用户对指定页面的添加、删除、编辑权 将查询结果导出为CSV、HTML、EXCEL文件 ★ 生成不同选择字段的SQL语句 生成数据库...

    风越asp代码生成器 V3.5

    生成提交校验码图片 ★ 搜索、列表文件以详细列表页(留言板风格)显示 生成权限,限制用户对指定页面的添加、删除、编辑权 将查询结果导出为CSV、HTML、EXCEL文件 ★ 生成不同选择字段的SQL语句 生成数据库...

    风越ASP代码生成器2.8

    生成提交校验码图片 ★ 搜索、列表文件以详细列表页(留言板风格)显示 生成权限,限制用户对指定页面的添加、删除、编辑权 将查询结果导出为CSV、HTML、EXCEL文件 ★ 生成不同选择字段的SQL语句 生成数据库...

Global site tag (gtag.js) - Google Analytics