JSP验证码系列(数字验证码、英文与数字混合验证码、中文验证码、表达式验证码)
一、数字验证码:
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验证码系列(数字验证码、英文与数字混合验证码、中文验证码、表达式验证码)相关推荐
- 图文识别(一):验证码识别---中、英文、数字混合的单行文字识别等
最近有位大神分享了一个验证码库,试用一下发现非常实用,特做个分享记录. Github地址:GitHub - sml2h3/ddddocr: 带带弟弟 通用验证码识别OCR pypi版 Pip地址:dd ...
- input框只能输入汉字,数字,英文,数字和英文,禁空格,中文和英文,特殊字符等多种验证
只能输入汉字: <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste=&quo ...
- 正则 数字和逗号,数字和英文,数字和点
onKeyUp="this.value=this.value.replace(/[^\d\,]/g,'')" //允许输入数字加逗号 onKeyUp="value=val ...
- java web中图形验证码的生成(英文和数字混合的验证码)
效果 技术要点 在此项目中创建了CheckCode类,此类继承了HttpServlet.在此CheckCode类中定义了public Color getRandColor(int s, int e) ...
- 后台传数字或英文,前台转成中文
遇到了两次这种情况啦,先说个简单的,仅在一个页面,如图,图片里写的挺清楚的再说个我写的复杂点的,因为是在不同页面不同状态下的显示,也就是一个是可选择的,一个是不可选择只展示的,这里就通过状态来判断的, ...
- 后端传数字或者英文,前端转化为中文
- 英文,数字和中文混合的彩色验证码实现
功能描述:英文,数字和中文混合的彩色验证码是一种比较安全的验证码,虽然这样的验证码会给用户输入带来不便,但对于保障用户账号的安全还是值得的.本实例介绍实现英文,数字和中文混合验证码的彩色验证码的方法, ...
- (二)验证码模块(随机英文验证and随机英文数字混合验证+Session)
随机英文验证(大小写字母组合)跟前面的随机数字验证码差不多. 由于大小写字母一共有52个,我不可能一个一个的写出来弄成一个数字,所以,我上网查找了资料,可以利用ascii将数字转为字母.但是在转换过程 ...
- html获取随机字母,html5 canvas随机生成英文字母数字组合图片验证码代码
简单又实用的html5 canvas随机生成英文字母数字组合图片验证码代码,点击验证码图片可更换一组,还可随意修改验证码的内容,样式. 查看演示 下载资源: 27 次 下载资源 下载积分: 20 积分 ...
最新文章
- 从国考大数据看中国哪个省的人最爱当官
- php检查在线用户,php – 检查用户是否在线laravel
- Android Studio创建AVD
- 汇编学习--7.10--程序编写
- 编程人员应该忙里偷闲
- SWMM代码移植到64位平台
- 【UVA No. 12676】转换哈夫曼编码 Inverting Huffman
- 【JWPlayer】官方JWPlayer去水印步骤
- 米3从android6降回4,从5G到4G,三个月的思考后我从小米9 pro降级到了小米9T pro
- android系统方法裁剪图片 华为手机显示为圆
- 2019 湖湘杯 pwn strng2
- 为什么我想要一个投影仪?微鲸F1智能投影仪首发评测
- linux 给u盘 变更名字,u盘怎么改名字|在电脑修改U盘名字的方法
- manjaro安装搜狗拼音
- CF39C Moon Craters
- 海兰云发布海底数据中心(UDC)解决方案
- Python NLTK的学习(一)
- AR项目总结之业务架构图
- 泛微 e-office v9.0任意文件上传漏洞{CNVD-2021-49104}
- 工厂计算机管理需要会什么,工厂生产管理系统应该具备哪些功能?- 智造家