`
lxy19791111
  • 浏览: 480837 次
  • 性别: 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# 校验码生成程序

    这个工具不仅能够生成校验码,还能将生成的校验码转化为图片格式,方便在网页或应用中显示和验证。接下来,我们将深入探讨校验码的概念、C#中的实现方法以及如何生成图片格式的校验码。 **一、校验码原理** 校验码...

    ASP.NET程序中实现校验码图像生成.rar

    校验码通常是一串随机的字母或数字,与图片结合,用户需要输入看到的验证码文字以证明其是人而不是机器。 在这个"ASP.NET程序中实现校验码图像生成.rar"压缩包中,包含了一个实现这一功能的示例。主要涉及以下几个...

    BMP图片校验码识别

    在"BMP图片校验码识别"这个主题中,我们主要关注的是如何验证和识别这种图片文件中的校验码。校验码通常用于确保数据的完整性和正确性,特别是在传输或存储过程中防止错误。 在256色的BMP图片中,每个像素由8位表示...

    PB版code128条形码图片生成

    在PowerBuilder(PB)环境中生成Code128条形码图片,可以帮助开发者在软件中实现数据的快速识别和记录。本篇将详细介绍如何在PB9版本中创建Code128条形码图像。 首先,了解Code128条形码的基本结构和特点: 1. Code...

    EAN13码的生成

    EAN13码由13位数字组成,包括国家代码、厂商代码、商品代码和校验码四部分,用于唯一识别一种商品。在本文中,我们将深入探讨EAN13码的生成原理,以及如何使用C语言结合EasyX绘图库来实现它的可视化展示。 1. EAN13...

    程序登录加上校验码for PB9,PB125支持中文校验码

    这种安全措施涉及到两种类型的校验码:一种是包含数字、字母和汉字的文字校验码,另一种是拖拉式图片校验码。这两种校验码都是为了防止自动化的恶意登录尝试,如机器人或脚本,从而保护用户账户的安全。 文字校验码...

    基于rustGUI(iced)实现的CRC16校验码生成工具(源代码)

    概览:本文件是基于rust和iced库编写的crc16校验码生成小程序,利用iced库生成GUI界面,可以输入16进制数据,可生成crc16modbus格式的校验码 语言:rust 库:iced 平台:vscode 适合人群:rust初学者,对GUI程序感...

    条形码生成(生成图片)

    5. **保存和使用**:将生成的条形码图片保存为常见的图像格式,如PNG、JPEG等,然后可以将其粘贴到报告、标签、网页或其他需要展示的地方。 在实际应用中,条形码生成还涉及到错误校验和条码阅读器的兼容性问题。...

    校验、生成 二维码

    本主题主要涉及二维码的校验和生成,特别关注在图片分割后对二维码图像的处理。 首先,我们要理解二维码的校验过程。二维码包含错误纠正机制,以确保即使在部分损坏的情况下也能正确解码。这种机制基于 Reed-...

    条形码生成器 aspx

    6. 条形码的验证:生成的条形码需要通过校验码来确保其正确性。校验码是通过对条形码的其他数字进行特定计算得出的,目的是确保在扫描时能准确无误地识别出条形码。 7. 条形码的图形设计:除了功能性,条形码的外观...

    ASP.NET生成图片验证码

    ### ASP.NET生成图片验证码知识点详解 #### 一、概述 在Web应用开发中,验证码是一种常见的安全措施,用于区分操作者是人还是自动化程序。本文将详细介绍如何在ASP.NET环境中生成图片验证码,包括代码实现与关键...

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

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

    条形码一维码生成代码

    开发者可以编写程序,结合条形码生成库,让用户在软件中输入信息后生成条形码图片,然后将其插入到文档或标签模板中进行打印。 总结来说,条形码一维码生成代码的核心是将文本信息转换成符合标准的条形码图案。在...

    delphi unigui如何实现图库式登录校验码源码.zip

    1. 图片库的创建:首先,你需要有一组预设的图片,这些图片将作为用户选择的校验码。你可以创建一个包含这些图片的资源文件或者直接在代码中加载它们。 2. 随机选择机制:为了每次登录时显示不同的图片组合,需要...

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

    本项目是基于SpringBoot框架,使用JDK 1.8,结合layui前端框架,实现了一个功能强大的验证码生成与校验系统。 首先,让我们深入了解一下验证码生成的过程。验证码通常包含一组随机生成的字符,这些字符可以是中文、...

    条形码生成器

    条形码生成器的工作原理通常是通过将输入的数据转换成特定的条形码格式,每个条形码都有起始、数据和结束符,以及可能的校验码,以确保数据的正确读取。生成的条形码图像通常包含黑白条纹和白色空间,其宽度和比例...

    各种二维码,条形码的生成开发

    2. 编码规则:条形码的编码遵循一定的标准,例如EAN-13条形码前三位是国家代码,中间四位是厂商代码,后五位是产品代码,最后一位是校验码。 3. 开发实现:条形码生成通常依赖于专门的库,如Java的barcode4j、Python...

Global site tag (gtag.js) - Google Analytics