JSP中文验证码及源代码实现

如果您喜欢这些文章,欢迎点击此处订阅本Blog title="RSS 2.0" type="application/rss+xml" href="http://feed.feedsky.com/softwave" rel="alternate"> Blog 订阅

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

   本文将介绍有关JSP中的一种验证码的实现,即中文验证码在JSP中的实现,使用中文验证码的好处是能提高验证的有效性,提高验证的安全度,因为中文相对于英文或数字笔画结构相对比较复杂,从而增加了分析程序解析验证码图片并读取验证信息的难度。在文中并分析中文验证的实现过程。
  JSP中实现中文验证码源码如下:
  1. <!--ChineseVal.jsp-->

  2. <%@ page  pageEncoding = "gb2312" contentType="image/jpeg" import = "javax.imageio.*,java.util.*,java.awt.image.*,java.awt.*" %>

  3. <%!

  4.     //在此处 获取并生成随机颜色

  5.     Color getRandColor(Random random, int ff, int cc) {

  6.        if (ff > 255)

  7.            ff = 255;

  8.        if (cc > 255)

  9.            cc = 255;

  10.        int r = ff + random.nextInt(cc - ff);

  11.        int g = ff + random.nextInt(cc - ff);

  12.        int b = ff + random.nextInt(cc - ff);

  13.        return new Color(r, g, b);

  14.     } %>

  15. <%

  16.     //在此处 设置JSP页面无缓存

  17.     response.setHeader( "Pragma" , "No-cache" );

  18.     response.setHeader( "Cache-Control" , "no-cache" );

  19.     response.setDateHeader( "Expires" , 0);

  20.     // 设置图片的长宽

  21.     int width = 130;
  22.     int height = 30;

  23.     //设定被随机选取的中文字,此处中文字内容过多,不一一列出,只是举例说明下。
  24.     String base = "/u9752 /u534a/u706b/u6cd5/u9898/u5efa/u8d76/u4f4d/u5531/u6d77/u4e03/u5973/u4efb /u4ef6/u611f/u51c6/u97f3/u7b54/u54e5/u9645/u65e7/u795e/u5ea7/u7ae0/u538b /u6162/u53d4/u80cc/u7ec6...省略文字。。。" ;

  25.     //设置 备选随机汉字的个数

  26.     int length = base.length();

  27.     // 创建缓存图像

  28.     BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

  29.     // 获取图像
  30.     Graphics g = image.getGraphics();

  31.     // 创建随机函数的实例

  32.     Random random = new Random();

  33.     //此处 设定图像背景色

  34.     g.setColor(getRandColor(random, 188235));

  35.     g.fillRect(00, width, height);

  36.     //设置随机 备选的字体类型

  37.     String[] fontTypes = { "/u5b8b/u4f53" , "/u65b0/u5b8b/u4f53" ,

  38.            "/u9ed1/u4f53" , "/u6977/u4f53" , "/u96b6/u4e66" };

  39.     int fontTypesLength = fontTypes.length;

  40.     // 在图片背景上增加噪点,增加图片分析难度

  41.     g.setColor(getRandColor(random, 180199));

  42.     g.setFont( new Font( "Times New Roman" , Font.PLAIN, 14));

  43.     for ( int i = 0; i < 4; i++) {

  44.        g.drawString( "@*@*@*@*@*@*@*" ,

  45.        05 * (i + 2));

  46.     }

  47.     // 取随机产生的验证码 (4 个汉字 )

  48.     // 保存生成的汉字字符串

  49.     String sRand = "" ;

  50.     for ( int i = 0; i < 4; i++) {

  51.        int start = random.nextInt(length);

  52.        String rand = base.substring(start, start + 1);

  53.        sRand += rand;

  54.        // 设置图片上字体的颜色

  55.        g.setColor(getRandColor(random, 10150));

  56.        // 设置字体格式

  57.        g.setFont( new Font(fontTypes[random.nextInt(fontTypesLength)],

  58.        Font.BOLD, 18 + random.nextInt(6)));

  59.        // 将此汉字画到验证图片上面

  60.        g.drawString(rand, 24 * i + 10 + random.nextInt(8), 24);

  61.     }

  62.     // 将验证码存入S ession中

  63.     session.setAttribute( "rand" , sRand);

  64.     g.dispose();

  65.     //将 图象输出到JSP页面中

  66.     ImageIO.write(image, "JPEG" , response.getOutputStream());

  67.     //关闭流

  68.     out.clear();

  69.     out=pageContext.pushBody();  

  70. %>
  以上就是JSP中产生中文验证码过程的源码分析,由中文作为验证码存在于JSP页面中,将会存在JSP中文乱码的现象,接下来文章将介绍如何调用JSP验证码产生和使用的方法,以及如何解决JSP中文验证码乱码问题和其他JAVA验证码的实现。

自【 http://www.blogjava.net/improviser/archive/2008/11/29/243370.html

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

<script type="text/javascript" src="http://www.google.com/reader/ui/publisher.js"></script> <script type="text/javascript" src="http://www.google.com/reader/public/javascript/user/00697638153916680411/state/com.google/broadcast?n=5&callback=GRC_p%28%7Bc%3A%22green%22%2Ct%3A%22%5Cu8FD9%5Cu4E9B%5Cu6587%5Cu7AE0%5Cu4E5F%5Cu503C%5Cu5F97%5Cu4E00%5Cu770B%22%2Cs%3A%22false%22%7D%29%3Bnew%20GRC"></script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值