一、数字验证码:

1.编写产生验证码的页面,image.jsp

<%@ page import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%> <%@ page import="java.io.OutputStream"%> <%!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); }%> <% try { response.setHeader("Pragma", "No-cache"); 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); OutputStream os = response.getOutputStream(); Graphics g = image.getGraphics(); Random random = new Random(); 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)); for (int i = 0; i < 155; i++) { 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++) { 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.drawString(rand, 13 * i +4, 16); } session.setAttribute("rand", sRand); g.dispose(); ImageIO.write(image, "JPEG", os); os.flush(); os.close(); os = null; response.flushBuffer(); out.clear(); out = pageContext.pushBody(); } catch (IllegalStateException e) { System.out.println(e.getMessage()); e.printStackTrace(); } %>

2.编写放置验证码的页面,使用javascript加载验证码图片:login.jsp

<%@ page contentType="text/html;charset=gb2312"%> <%@ page language="java" import="java.sql.*" errorPage=""%> <html <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>用户登录</title> <mce:script language="javascript"><!-- //加载验证码图片 function loadimage() { document.getElementById("randImage").src = "image.jsp?" + Math.random(); } // --></mce:script> </head> <body> <table width="256" border="0" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <form action="validate.jsp" method="post" name="loginForm"> <tr> <td width="118" height="22" valign="middle" align="center"> <input type="text" name="rand" size="15"> </td> <td width="138" valign="middle" align="center"> <img alt="code..." name="randImage" id="randImage" src="numimg.jsp" width="60" height="20" border="1" align="absmiddle"> </td> </tr> <tr> <td height="36" colspan="2" align="center" valign="middle"> <a href="javascript:loadimage();" mce_href="javascript:loadimage();"><font class=pt95>看不清点我</font> </a> </td> </tr> <tr> <td height="36" colspan="2" align="center" valign="middle"> <input type="submit" name="login" value="提交"> </td> </tr> </form> </table> </body> </html>

注意:src="numing.jsp"

<img alt="code..." name="randImage" id="randImage" src="numimg.jsp"
      width="60" height="20" border="1" align="absmiddle">

3、测试效果:

二、英文与数字验证码

1、编写产生验证码的页面:ening.jsp

<%@ page import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%> <%@ page import="java.io.OutputStream"%> <%!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); }%> <% try { response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); int width = 110, height = 20; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); OutputStream os = response.getOutputStream(); Graphics g = image.getGraphics(); Random random = new Random(); 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)); for (int i = 0; i < 155; i++) { 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[] s = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; String sRand = ""; for (int i = 0; i < 4; i++) { String rand = ""; if (random.nextBoolean()) { rand = String.valueOf(random.nextInt(10)); } else { int index = random.nextInt(25); rand = s[index]; } sRand += rand; g.setColor(new Color(20 + random.nextInt(10), 20 + random .nextInt(110), 20 + random.nextInt(110))); g.drawString(rand, 17 * i + 6, 16); } session.setAttribute("rand", sRand); g.dispose(); ImageIO.write(image, "JPEG", os); os.flush(); os.close(); os = null; response.flushBuffer(); out.clear(); out = pageContext.pushBody(); } catch (IllegalStateException e) { System.out.println(e.getMessage()); e.printStackTrace(); } %>

2.编写放置验证码的页面,使用javascript加载验证码图片:login.jsp

<%@ page contentType="text/html;charset=gb2312"%> <%@ page language="java" import="java.sql.*" errorPage=""%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>用户登录</title> <mce:script language="javascript"><!-- function loadimage(){ document.getElementById("randImage").src = "enimg.jsp?"+Math.random(); } // --></mce:script> </head> <body> <table width="256" border="0" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <form action="validate.jsp" method="post" name="loginForm"> <tr> <td width="118" height="22" valign="middle" align="center"> <input type="text" name="rand" size="15"> </td> <td width="138" valign="middle" align="center"> <img alt="code..." name="randImage" id="randImage" src="enimg.jsp" mce_src="enimg.jsp" width="60" height="20" border="1" align="absmiddle"> </td> </tr> <tr> <td height="36" colspan="2" align="center" valign="middle"> <a href="javascript:loadimage();" mce_href="javascript:loadimage();"><font class=pt95>看不清点我</font> </a> </td> </tr> <tr> <td height="36" colspan="2" align="center" valign="middle"> <input type="submit" name="login" value="提交"> </td> </tr> </form> </table> </body> </html>

注意:src="ening.jsp"

<img alt="code..." name="randImage" id="randImage" src="enimg.jsp"
      width="60" height="20" border="1" align="absmiddle">

3.测试效果:

三、JSP中文版验证码:

1.编写产生验证码的页面:cimg

<%@page contentType="image/jpeg" pageEncoding="UTF-8" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"%> <%!//生成随机颜色 Color getRandColor(Random random, int fc, int bc) { 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"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); // 设置图片的长宽 int width = 106, height = 30; //设置备选汉字,剔除一些不雅的汉字 String base = "/u6211/u662f/u5f90/u5f20/u660e/u71d5/u534e/u541b/u5c24/u6731/u7ea2/u7231/u4f20/u534e/u6768/u5510/u536b/u5b8f/u950b/u5f20/u4e2d/u56fd/u5317/u4eac/u4e0a/u6d77/u5929/u6d25/u6e56/u5317"; //备选汉字的长度 int length = base.length(); //创建内存图像 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // 获取图形上下文 Graphics g = image.getGraphics(); //创建随机类的实例 Random random = new Random(); // 设定图像背景色(因为是做背景,所以偏淡) g.setColor(getRandColor(random, 200, 250)); g.fillRect(0, 0, width, height); //备选字体 String[] fontTypes = { "u5b8bu4f53", "u65b0u5b8bu4f53", "u9ed1u4f53", "u6977u4f53", "u96b6u4e66" }; int fontTypesLength = fontTypes.length; //在图片背景上增加噪点 g.setColor(getRandColor(random, 160, 200)); g.setFont(new Font("Times New Roman", Font.PLAIN, 14)); for (int i = 0; i < 6; i++) { g.drawString("*********************************************", 0, 5 * (i + 2)); } //取随机产生的认证码(6个汉字) //保存生成的汉字字符串 String sRand = ""; for (int i = 0; i < 3; i++) { int start = random.nextInt(length); String rand = base.substring(start, start + 1); sRand += rand; //设置字体的颜色 g.setColor(getRandColor(random, 10, 150)); //设置字体 g.setFont(new Font(fontTypes[random.nextInt(fontTypesLength)], Font.BOLD, 18 + random.nextInt(6))); //将此汉字画到图片上 g.drawString(rand, 24 * i + 10 + random.nextInt(8), 24); } //将认证码存入session session.setAttribute("rand", sRand); g.dispose(); //输出图象到页面 out.clear(); out = pageContext.pushBody(); ImageIO.write(image, "JPEG", response.getOutputStream()); %>

2.编写放置验证码的页面,使用javascript加载验证码图片:login.jsp

<%@ page contentType="text/html;charset=gb2312"%> <%@ page language="java" import="java.sql.*" errorPage=""%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>用户登录</title> <mce:script language="javascript"><!-- function loadimage(){ document.getElementById("randImage").src = "cimg.jsp?"+Math.random(); } // --></mce:script> </head> <body> <table width="256" border="0" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <form action="validate.jsp" method="post" name="loginForm"> <tr> <td width="118" height="22" valign="middle" align="center"> <input type="text" name="rand" size="15"> </td> <td width="138" valign="middle" align="center"> <img alt="code..." name="randImage" id="randImage" src="cimg.jsp" mce_src="cimg.jsp" width="60" height="20" border="1" align="absmiddle"> </td> </tr> <tr> <td height="36" colspan="2" align="center" valign="middle"> <a href="javascript:loadimage();" mce_href="javascript:loadimage();"><font class=pt95>看不清点我</font> </a> </td> </tr> <tr> <td height="36" colspan="2" align="center" valign="middle"> <input type="submit" name="login" value="提交"> </td> </tr> </form> </table> </body> </html>

注意:src="cimg.jsp"

<img alt="code..." name="randImage" id="randImage" src="cimg.jsp"
      width="60" height="20" border="1" align="absmiddle">

3.测试效果:

四、JSP版表达式验证码

1.编写产生验证码的界面:

<%@ page contentType="text/html;charset=gb2312"%> <%@ page language="java" import="java.sql.*" errorPage=""%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>用户登录</title> <mce:script language="javascript"><!-- function loadimage(){ document.getElementById("randImage").src = "numimg.jsp?"+Math.random(); } // --></mce:script> </head> <body> <table width="256" border="0" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <form action="validate.jsp" method="post" name="loginForm"> <tr> <td width="118" height="22" valign="middle" align="center"> <input type="text" name="rand" size="15"> </td> <td width="138" valign="middle" align="center"> <img alt="code..." name="randImage" id="randImage" src="numimg.jsp" mce_src="numimg.jsp" width="60" height="20" border="1" align="absmiddle"> </td> </tr> <tr> <td height="36" colspan="2" align="center" valign="middle"> <a href="javascript:loadimage();" mce_href="javascript:loadimage();"><font class=pt95>看不清点我</font> </a> </td> </tr> <tr> <td height="36" colspan="2" align="center" valign="middle"> <input type="submit" name="login" value="提交"> </td> </tr> </form> </table> </body> </html>

2.编写放置验证码的页面,使用javascript加载验证码图片:login.jsp

<%@ page contentType="text/html;charset=gb2312"%> <%@ page language="java" import="java.sql.*" errorPage=""%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>用户登录</title> <mce:script language="javascript"><!-- function loadimage(){ document.getElementById("randImage").src = "numimg.jsp?"+Math.random(); } // --></mce:script> </head> <body> <table width="256" border="0" cellpadding="0" cellspacing="0"> <!--DWLayoutTable--> <form action="validate.jsp" method="post" name="loginForm"> <tr> <td width="118" height="22" valign="middle" align="center"> <input type="text" name="rand" size="15"> </td> <td width="138" valign="middle" align="center"> <img alt="code..." name="randImage" id="randImage" src="numimg.jsp" mce_src="numimg.jsp" width="60" height="20" border="1" align="absmiddle"> </td> </tr> <tr> <td height="36" colspan="2" align="center" valign="middle"> <a href="javascript:loadimage();" mce_href="javascript:loadimage();"><font class=pt95>看不清点我</font> </a> </td> </tr> <tr> <td height="36" colspan="2" align="center" valign="middle"> <input type="submit" name="login" value="提交"> </td> </tr> </form> </table> </body> </html>

注意:src="numimg.jsp"

<img alt="code..." name="randImage" id="randImage" src="numimg.jsp"
      width="60" height="20" border="1" align="absmiddle">

3.测试效果:

JSP验证码系列(数字验证码、英文与数字混合验证码、中文验证码、表达式验证码)相关推荐

  1. 图文识别(一):验证码识别---中、英文、数字混合的单行文字识别等

    最近有位大神分享了一个验证码库,试用一下发现非常实用,特做个分享记录. Github地址:GitHub - sml2h3/ddddocr: 带带弟弟 通用验证码识别OCR pypi版 Pip地址:dd ...

  2. input框只能输入汉字,数字,英文,数字和英文,禁空格,中文和英文,特殊字符等多种验证

    只能输入汉字: <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste=&quo ...

  3. 正则 数字和逗号,数字和英文,数字和点

    onKeyUp="this.value=this.value.replace(/[^\d\,]/g,'')" //允许输入数字加逗号 onKeyUp="value=val ...

  4. java web中图形验证码的生成(英文和数字混合的验证码)

    效果 技术要点 在此项目中创建了CheckCode类,此类继承了HttpServlet.在此CheckCode类中定义了public Color getRandColor(int s, int e) ...

  5. 后台传数字或英文,前台转成中文

    遇到了两次这种情况啦,先说个简单的,仅在一个页面,如图,图片里写的挺清楚的再说个我写的复杂点的,因为是在不同页面不同状态下的显示,也就是一个是可选择的,一个是不可选择只展示的,这里就通过状态来判断的, ...

  6. 后端传数字或者英文,前端转化为中文

  7. 英文,数字和中文混合的彩色验证码实现

    功能描述:英文,数字和中文混合的彩色验证码是一种比较安全的验证码,虽然这样的验证码会给用户输入带来不便,但对于保障用户账号的安全还是值得的.本实例介绍实现英文,数字和中文混合验证码的彩色验证码的方法, ...

  8. (二)验证码模块(随机英文验证and随机英文数字混合验证+Session)

    随机英文验证(大小写字母组合)跟前面的随机数字验证码差不多. 由于大小写字母一共有52个,我不可能一个一个的写出来弄成一个数字,所以,我上网查找了资料,可以利用ascii将数字转为字母.但是在转换过程 ...

  9. html获取随机字母,html5 canvas随机生成英文字母数字组合图片验证码代码

    简单又实用的html5 canvas随机生成英文字母数字组合图片验证码代码,点击验证码图片可更换一组,还可随意修改验证码的内容,样式. 查看演示 下载资源: 27 次 下载资源 下载积分: 20 积分 ...

最新文章

  1. 从国考大数据看中国哪个省的人最爱当官
  2. php检查在线用户,php – 检查用户是否在线laravel
  3. Android Studio创建AVD
  4. 汇编学习--7.10--程序编写
  5. 编程人员应该忙里偷闲
  6. SWMM代码移植到64位平台
  7. 【UVA No. 12676】转换哈夫曼编码 Inverting Huffman
  8. 【JWPlayer】官方JWPlayer去水印步骤
  9. 米3从android6降回4,从5G到4G,三个月的思考后我从小米9 pro降级到了小米9T pro
  10. android系统方法裁剪图片 华为手机显示为圆
  11. 2019 湖湘杯 pwn strng2
  12. 为什么我想要一个投影仪?微鲸F1智能投影仪首发评测
  13. linux 给u盘 变更名字,u盘怎么改名字|在电脑修改U盘名字的方法
  14. manjaro安装搜狗拼音
  15. CF39C Moon Craters
  16. 海兰云发布海底数据中心(UDC)解决方案
  17. Python NLTK的学习(一)
  18. AR项目总结之业务架构图
  19. 泛微 e-office v9.0任意文件上传漏洞{CNVD-2021-49104}
  20. 工厂计算机管理需要会什么,工厂生产管理系统应该具备哪些功能?- 智造家

热门文章

  1. Pycharm连接数据库
  2. 通信工程的岗位有哪些?
  3. lightgbm java_开源|LightGBM基本原理,以及调用形式
  4. 微信小程序的官方Demo
  5. fill splinter 延迟_学习python +splinter自动刷新抢票
  6. 中国菜刀使用(图片上传漏洞)
  7. 新能源汽车VCU开发模型及控制策略
  8. response详解
  9. 关于达梦数据库报错有歧义的列名
  10. Amazon Mechanical Turk 的质量管理