it167.com  设为主页
 收藏本站
 
  资讯:业界动态 | 软件动态 | 人物专栏 | 安全资讯 | 网络生活 | 电子商务 | 小游戏 | 视频 | 美女图片 | 音乐
  网络编程 | 网站运营 | 网页制作 | 图形图象 | 操作系统 | 媒体动画 | 软件教学 | 网络应用 | 邮件系统 | 网络安全 | 认证考试
asp | .net | php | jsp | Sql | java | Dreamweaver | FrontPages | Javascript | css | Coreldraw | photoshop | Flash | Coreldraw
当前位置: > 主页>网络编程>Jsp>Jsp开发技巧>jsp彩色汉字验证码教程
最新新闻

·机会与整合 边缘化互联
·TOM-Skype新增三大本地
·雅虎抢闸邮箱竞赛 网易
·新浪抢攻北京奥运
·洞悉网络口碑的掘金机会
·拆解网络病毒黑金交易
·木马下载器近期出现新变
·《互联网周刊》第17期文
·Web2.0是否催生自吹自擂
·三张宝宝裸照招来MSN封
热门新闻
·J2EE架构初学者的6个最
·高效简洁的Struts分页技
·jsp彩色汉字验证码教程
·Eclipse插件开发之定制
·一个开发人员眼中的JSP
·一个开发人员眼中的JSP
·JavaBean在JSP中的应用
·在JSP中访问数据库方法
·JSP中文乱码问题解决方
·JSP标签库介绍
推荐新闻
 
 

jsp彩色汉字验证码教程  

作者:   来源:   点击:   日期:2007-11-29

【摘 要】一些网站采用了字母和数字的验证码,数字和字母加起来一共30多个,如果有心,还是能够通过方法识别出来。

 我在网上看到一篇文章jsp彩色验证码,我进行了加强,生成的验证码内容为汉字,可以方便应用在面向汉语网民的网站认证上。

当然,我还看到别人考虑的几种方法:
1.生成计算题,比如20+34*(23-12)=?,用户必须输入正确的答案才能通过验证,这个想法挺好,但是用户必须打开计算器进行计算,增加了用户的难度
2.问一些常见的问题,比如“人”这个字由几笔组成。这也是不错的想法,关键是必须有上万条的题库,而且题库的答案必须是明确的,简单易比较的,这个难度也较大。

下面是彩色汉字验证码的代码。

  1. <%@?page?contentType="image/jpeg"?import=
    "java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"
    ?%>
  2. <%!
  3. //create?by?smallnest
  4. //email:?smallnest@gmail.com
  5. //website:www.kuaff.com


  6. //生成随机颜色
  7. Color?getRandColor(Random?random,int?fc,int?bc)
  8. {
  9. ????????if(fc>255)?fc=255;
  10. ????????if(bc>255)?bc=255;
  11. ????????int?r=fc+random.nextInt(bc-fc);
  12. ????????int?g=fc+random.nextInt(bc-fc);
  13. ????????int?b=fc+random.nextInt(bc-fc);
  14. ????????return?new?Color(r,g,b);
  15. }
  16. %>
  17. <%
  18. //设置页面不缓存
  19. response.setHeader("Pragma","No-cache");
  20. response.setHeader("Cache-Control","no-cache");
  21. response.setDateHeader("Expires",?0);

  22. //?设置图片的长宽
  23. int?width=176,?height=30;
  24. //设置备选汉字,剔除一些不雅的汉字
  25. String?base?=?
    "\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba
    \u4eec\u6709\u6765\u4ed6\u8fd9\u4e0a\u7740\u4e2a\
    u5730\u5230\u5927\u91cc\u8bf4\u5c31\u53bb\u5b50\
    u5f97\u4e5f\u548c\u90a3\u8981\u4e0b\u770b\u5929\
    u65f6\u8fc7\u51fa\u5c0f\u4e48\u8d77\u4f60\u90fd\
    u628a\u597d\u8fd8\u591a\u6ca1\u4e3a\u53c8\u53ef\
    u5bb6\u5b66\u53ea\u4ee5\u4e3b\u4f1a\u6837\u5e74\
    u60f3\u751f\u540c\u8001\u4e2d\u5341\u4ece\u81ea\
    u9762\u524d\u5934\u9053\u5b83\u540e\u7136\u8d70\
    u5f88\u50cf\u89c1\u4e24\u7528\u5979\u56fd\u52a8\
    u8fdb\u6210\u56de\u4ec0\u8fb9\u4f5c\u5bf9\u5f00\
    u800c\u5df1\u4e9b\u73b0\u5c71\u6c11\u5019\u7ecf\
    u53d1\u5de5\u5411\u4e8b\u547d\u7ed9\u957f\u6c34\
    u51e0\u4e49\u4e09\u58f0\u4e8e\u9ad8\u624b\u77e5\
    u7406\u773c\u5fd7\u70b9\u5fc3\u6218\u4e8c\u95ee\
    u4f46\u8eab\u65b9\u5b9e\u5403\u505a\u53eb\u5f53\
    u4f4f\u542c\u9769\u6253\u5462\u771f\u5168\u624d\
    u56db\u5df2\u6240\u654c\u4e4b\u6700\u5149\u4ea7\
    u60c5\u8def\u5206\u603b\u6761\u767d\u8bdd\u4e1c\
    u5e2d\u6b21\u4eb2\u5982\u88ab\u82b1\u53e3\u653e\
    u513f\u5e38\u6c14\u4e94\u7b2c\u4f7f\u5199\u519b\
    u5427\u6587\u8fd0\u518d\u679c\u600e\u5b9a\u8bb8\
    u5feb\u660e\u884c\u56e0\u522b\u98de\u5916\u6811\
    u7269\u6d3b\u90e8\u95e8\u65e0\u5f80\u8239\u671b\
    u65b0\u5e26\u961f\u5148\u529b\u5b8c\u5374\u7ad9\
    u4ee3\u5458\u673a\u66f4\u4e5d\u60a8\u6bcf\u98ce\
    u7ea7\u8ddf\u7b11\u554a\u5b69\u4e07\u5c11\u76f4\
    u610f\u591c\u6bd4\u9636\u8fde\u8f66\u91cd\u4fbf\
    u6597\u9a6c\u54ea\u5316\u592a\u6307\u53d8\u793e\
    u4f3c\u58eb\u8005\u5e72\u77f3\u6ee1\u65e5\u51b3\
    u767e\u539f\u62ff\u7fa4\u7a76\u5404\u516d\u672c\
    u601d\u89e3\u7acb\u6cb3\u6751\u516b\u96be\u65e9\
    u8bba\u5417\u6839\u5171\u8ba9\u76f8\u7814\u4eca\
    u5176\u4e66\u5750\u63a5\u5e94\u5173\u4fe1\u89c9\
    u6b65\u53cd\u5904\u8bb0\u5c06\u5343\u627e\u4e89\
    u9886\u6216\u5e08\u7ed3\u5757\u8dd1\u8c01\u8349\
    u8d8a\u5b57\u52a0\u811a\u7d27\u7231\u7b49\u4e60\
    u9635\u6015\u6708\u9752\u534a\u706b\u6cd5\u9898\
    u5efa\u8d76\u4f4d\u5531\u6d77\u4e03\u5973\u4efb\
    u4ef6\u611f\u51c6\u5f20\u56e2\u5c4b\u79bb\u8272\
    u8138\u7247\u79d1\u5012\u775b\u5229\u4e16\u521a\
    u4e14\u7531\u9001\u5207\u661f\u5bfc\u665a\u8868\
    u591f\u6574\u8ba4\u54cd\u96ea\u6d41\u672a\u573a\
    u8be5\u5e76\u5e95\u6df1\u523b\u5e73\u4f1f\u5fd9\
    u63d0\u786e\u8fd1\u4eae\u8f7b\u8bb2\u519c\u53e4\
    u9ed1\u544a\u754c\u62c9\u540d\u5440\u571f\u6e05\
    u9633\u7167\u529e\u53f2\u6539\u5386\u8f6c\u753b\
    u9020\u5634\u6b64\u6cbb\u5317\u5fc5\u670d\u96e8\
    u7a7f\u5185\u8bc6\u9a8c\u4f20\u4e1a\u83dc\u722c\
    u7761\u5174\u5f62\u91cf\u54b1\u89c2\u82e6\u4f53\
    u4f17\u901a\u51b2\u5408\u7834\u53cb\u5ea6\u672f\
    u996d\u516c\u65c1\u623f\u6781\u5357\u67aa\u8bfb\
    u6c99\u5c81\u7ebf\u91ce\u575a\u7a7a\u6536\u7b97\
    u81f3\u653f\u57ce\u52b3\u843d\u94b1\u7279\u56f4\
    u5f1f\u80dc\u6559\u70ed\u5c55\u5305\u6b4c\u7c7b\
    u6e10\u5f3a\u6570\u4e61\u547c\u6027\u97f3\u7b54\
    u54e5\u9645\u65e7\u795e\u5ea7\u7ae0\u5e2e\u5566\
    u53d7\u7cfb\u4ee4\u8df3\u975e\u4f55\u725b\u53d6\
    u5165\u5cb8\u6562\u6389\u5ffd\u79cd\u88c5\u9876\
    u6025\u6797\u505c\u606f\u53e5\u533a\u8863\u822c\
    u62a5\u53f6\u538b\u6162\u53d4\u80cc\u7ec6"
    ;
  26. //备选汉字的长度
  27. int?length?=?base.length();

  28. //创建内存图像
  29. BufferedImage?image?=?new?BufferedImage
    (width,?height,?BufferedImage.TYPE_INT_RGB);
  30. //?获取图形上下文
  31. Graphics?g?=?image.getGraphics();

  32. //创建随机类的实例
  33. Random?random?=?new?Random();

  34. //?设定图像背景色(因为是做背景,所以偏淡)
  35. g.setColor(getRandColor(random,200,250));
  36. g.fillRect(0,?0,?width,?height);

  37. //备选字体
  38. String[]?fontTypes?=?
    {"\u5b8b\u4f53","\u65b0\u5b8b\u4f53",
    "\u9ed1\u4f53","\u6977\u4f53","\u96b6\u4e66"};
  39. int?fontTypesLength?=?fontTypes.length;

  40. //在图片背景上增加噪点
  41. g.setColor(getRandColor(random,160,200));
  42. g.setFont(new?Font("Times?New?Roman",Font.PLAIN,14));
  43. for?(int?i=0;i<6;i++)
  44. {
  45. ????g.drawString
    ("*********************************************",0,5*(i+2));
  46. }


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

  48. //保存生成的汉字字符串
  49. String?sRand="";
  50. for?(int?i=0;i<6;i++)
  51. {
  52. ????int?start?=?random.nextInt(length);
  53. ????String?rand=base.substring(start,start+1);
  54. ????sRand+=rand;
  55. ????
  56. ????//设置字体的颜色
  57. ????g.setColor(getRandColor(random,10,150));
  58. ????//设置字体
  59. ????g.setFont(new?Font(fontTypes[random.nextInt(fontTypesLength)]
    ,Font.BOLD,18?+?random.nextInt(6)));
  60. ????//将此汉字画到图片上
  61. ????g.drawString(rand,24*i+?10?+?random.nextInt(8),24);
  62. }

  63. //将认证码存入session
  64. session.setAttribute("rand",sRand);

  65. g.dispose();

  66. //输出图象到页面
  67. ImageIO.write(image,?"JPEG",?response.getOutputStream());


  68. %>?


文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·Eclipse插件开发之定制向导学习 ·jsp彩色汉字验证码教程
·一个开发人员眼中的JSP技术(下) ·高效简洁的Struts分页技巧
·一个开发人员眼中的JSP技术(上) ·J2EE架构初学者的6个最佳实践

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:it167  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。