本文介绍一下web开发中常用的验证码的设计及使用。

image.jsp 用于生成验证码,login.jsp 使用验证码,validate.jsp 用于验证用户输入的验证码是否正确。

image.jsp如下:

<%@ page contentType="image/jpeg" import="java.awt.*, java.awt.image.*,java.util.*,javax.imageio.*" %> <%@ page language="java" pageEncoding="utf-8"%> <%! //生成随机颜色 Color getRandColor(int fc,int bc) { Random random = new Random(); if(fc>255) fc=255; if(bc>255) bc=255; int r=fc+random.nextInt(bc-fc); int g=fc+random.nextInt(bc-fc); int b=fc+random.nextInt(bc-fc); return new Color(r,g,b); } %> <% response.setHeader("Pragma","No-cache");//设置http消息头,禁用缓存 response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); //设置缓存过期时间 int width=60, height=20; //矩形图像的长宽 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//创建图像缓冲区 Graphics g = image.getGraphics(); //创建图像 g.setColor(getRandColor(200,250)); //设置图形上下文的当前颜色--用于填充背景 g.fillRect(0, 0, width, height); //使用图形上下文的当前颜色填充矩形 g.setFont(new Font("Times New Roman",Font.PLAIN,18));//将此图形上下文的字体设置为指定字体 g.setColor(getRandColor(160,200)); //设置图形上下文的当前颜色--用于画噪音线 Random random = new Random(); for (int i=0;i<155;i++) //画155条噪音线 { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x,y,x+xl,y+yl); } String sRand=""; for (int i=0;i<4;i++){ //画0-10之间的4个随机数 String rand=String.valueOf(random.nextInt(10)); sRand+=rand; //g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); g.setColor(getRandColor(20,130)); g.drawString(rand,13*i+6,16); //横坐标从6像素开始,字符间隔13像素 } g.dispose(); //释放此图形的上下文以及它使用的所有系统资源 session.removeAttribute("rand"); session.setAttribute("rand",sRand);//将4个随机数添加到当前会话中 ImageIO.write(image, "JPEG",response.getOutputStream() );//将image按jpeg格式写入到response流中 %>

login.jsp 如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'MyJsp.jsp' starting page</title> <mce:script language="JavaScript"><!-- function loadimage() { document.getElementById("randImage").src = "fjm/image.jsp?"+Math.random(); } // --></mce:script> </head> <body> <form action ="validate.jsp" method ="post"> <table> <tr> <td>验证码:</td> <td><input name="rand" class="formfieldyzm" id="rand" type="text" maxlength="4" tabindex="3"></td> <td> <img align="center" valign="middle" alt="验证码..." name="randImage" id="randImage" src="/cjfx/fjm/image.jsp" mce_src="cjfx/fjm/image.jsp" width="100" height="20" border="1"/> <a οnclick="loadimage()"> <font color="red"><u>换一个</u></font></a> </td> <td><button type ="submit" action="">提交</button></td> </tr> </table> </form> </body> </html>

validate.jsp 如下:

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'MyJsp1.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> --> </head> <body> <% String str = ""; String usrRand = request.getParameter("rand"); String sysRand = session.getAttribute("rand").toString(); if (usrRand.equals(sysRand)) str = "success!"; else str = "failure!"; %> 用户输入验证码:<%=request.getParameter("rand")%> 系统生成验证码:<%=sysRand %> <%=str%><br> </body> </html>

java 验证码的实现 以及 使用相关推荐

  1. java 验证码透明背景_Java中的证书透明度验证

    java 验证码透明背景 因此,我有一个幼稚的想法,即除了证书有效性检查(在Java中)之外,将证书透明性验证作为每个请求的一部分也很容易. 牺牲了整个周末的一半时间,我可以证明这并不是一件小事. 但 ...

  2. java 验证码生成和验证

    1.java 验证码生成与校验原理: 后台生辰验证码图片,将图片传到前台: 后台在session中保存验证码内容: 前台输入验证码后传到后台在后台取出session保存的验证码进行校验. 2.图片生成 ...

  3. java 验证码_java实现简单的验证码功能

    最近要做一个网站,要求实现验证码程序,经过不断调试,终于成功实现功能. 一.验证码生成类 生成验证码的话需要用到java的Graphics类库,画出一个验证码 废话不多说,直接上代码 package ...

  4. java 验证码旋转,java实现动态验证码

    java动态实现验证码,供大家参考,具体内容如下 [实现效果] 点击图片或者文字可以更换验证码 验证码随机生成,由大小写字母和数字组成 验证码字体颜色随机生成,字母角度有偏转 干扰线随机分布 在这里插 ...

  5. Java验证码jar包ValidateCode.jar的使用(附百度网盘下载)

    Java验证码jar包ValidateCode.jar的使用(附百度网盘下载地址) 在项目中我们会经常用写图片验证码这个功能.但是自己去封装也挺繁琐的,这里提供给各位小伙伴一个很好用的生成图片验证码的 ...

  6. java验证码识别库

    java验证码识别库 使用J4L识别验证码 使用 Tess4J 进行 OCR 识别 使用J4L识别验证码 将解压文件下bits64目录的三个文件 liblept168.dll tess3Wrapper ...

  7. java验证码效果,和图片缩略效果

    java验证码效果,和图片缩略效果 效果图:验证码 效果图:缩略 这两个效果我做在了一个类里面,可以进行调用,直接上代码 注:要是复制粘贴此代码,需要更改自己所使用的字体,也可以用我这个字体,记得更改 ...

  8. java验证码源码_Java通用验证码程序及应用示例(提供源码下载)

    评论 # re: Java通用验证码程序及应用示例(提供源码下载) 2009-11-27 17:09 零全零美 多谢博主写出这么好的总结,如果能加上汉字验证码,会更完美!  回复  更多评论 # re ...

  9. java 验证码图片识别_JavaSE图像验证码简单识别程序详解

    本文为大家分享了JavaSE图像验证码简单识别程序,供大家参考,具体内容如下 首先你应该对图片进行样本采集,然后将样本进行灰度处理,也就是变成黑白两色. 然后你就可以使用该类,对目标文件进行分析.具体 ...

  10. java验证码实现简单_java实现简单的验证码功能

    最近要做一个网站,要求实现验证码程序,经过不断调试,终于成功实现功能. 一.验证码生成类 生成验证码的话需要用到java的Graphics类库,画出一个验证码 废话不多说,直接上代码 package ...

最新文章

  1. java写事物提交_fabric-sdk-java 提交事务
  2. oracle 27504,ora-27504 ora-27300 ora-27301 ora-27302
  3. 10000以内回文数java,求10到10000有哪些回文数?用C语言编写  并且用数组
  4. boost::core模块实现交换string
  5. 一天掌握Android JNI本地编程 快速入门
  6. linux服务器上文件编码格式转化shell
  7. iOS.ReactNative-3-about-viewmanager-uimanager-and-bridgemodule
  8. 程序员都会的 35 个 jQuery 小技巧
  9. 华为交换机eth口作用_华为交换机口如何绑定端口号
  10. win10关闭windows聚焦_win10 系统中的windows聚焦是什么意思 - 卡饭网
  11. rss对称网卡linux,dpdk-18.11网卡多队列RSS设置
  12. DASCTFNepCTF 部分writeup
  13. 微信小程序setData的使用
  14. 使用 Docusaurus 搭建个人网站项目
  15. 信息熵、相对熵(KL散度)、交叉熵、条件熵、互信息、联合熵
  16. eyeBeam1.5或X-lite上的DTMF设置
  17. 应对高速芯片从相位噪声到时间抖动的挑战
  18. ubuntu16.04下px4环境搭建与固件编译
  19. 【PHP基础题】打印出100以内的质数,一行显示5个。(质数是只能被1跟它本身整除的数。1不是质数)
  20. 两年融资 280 亿,美国的新造车势力又行了?

热门文章

  1. 质检员根据检索报告中A类文献
  2. 两岸通衢处,飞虹跨碧溪:华为OptiXstar光猫开启的千兆征途
  3. 11. Consumer-并发消费
  4. python开发对电脑要求高吗_学Python的学生买电脑,该买什么配置的?
  5. ora-19510/ora-27037
  6. R语言ggplot画条形图按照想要的顺序排列
  7. Sallen-Key二阶低通滤波器——设计问题浅析
  8. Arduino - 最小系统(基于ATMEGA8-16PU)
  9. ARP协议与ARP欺骗
  10. 【C语言教程】2、C 语言基本语法