code.jsp页面用于生成校验码图片,代码如下:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="image/jpeg" import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
//create by smallnest
//email: smallnest@gmail.com
//website:www.kuaff.com
//生成随机颜色
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);
}
%>
<%
// 设置图片的长宽
int width=176, height=30;
//设置备选字符,剔除一些不雅的字符
String base = "abcdefghijklmnopqrstuvwxyz1234567890";
//备选字符的长度
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 = {"\u5b8b\u4f53","\u65b0\u5b8b\u4f53","\u9ed1\u4f53","\u6977\u4f53","\u96b6\u4e66"};
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));
}
//保存生成的字符串
String sRand="";
for (int i=0;i<6;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();
//输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
out.clear();
out = pageContext.pushBody();
%>
login.jsp用于访问的页面,校验码图片来自于code.jsp,form表单提交到check.jsp,代码如下:
<%@ page contentType="text/html;charset=UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>认证码输入页面</title>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</head>
<body>
<form method="post" action="check.jsp">
<table>
<tr>
<td align=left>系统产生的认证码:</td>
<td><img border=0 src="<%=basePath%>code.jsp"></td>
</tr>
<tr>
<td align=left>输入上面的认证码:</td>
<td><input type=text name=rand value=""></td>
</tr>
<tr>
<td colspan=2 align=center><input type=submit value="提交检测"></td>
</tr>
</table>
</form>
</body>
</html>
check.jsp用于检验所输入校验码是否正确,代码如下:
<%@ page language="java" pageEncoding="UTF-8"%>
<html>
<head>
<title>认证码验证页面</title>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</head>
<body>
<%
String rand = (String)session.getAttribute("rand");
String input = request.getParameter("rand");
%>
系统产生的认证码为: <%= rand %><br>
您输入的认证码为: <%= input %><br>
<br>
<%
if (rand.equals(input)) {
%>
<font color=green>输入相同,认证成功!</font>
<%
} else {
%>
<font color=red>输入不同,认证失败!</font>
<%
}
%>
</body>
</html>
分享到:
相关推荐
本篇将详细介绍如何在JSP(JavaServer Pages)中实现数字和数字字母混合的验证码生成及校验。 首先,验证码的生成通常分为两个步骤:生成随机字符串和将其转化为图形。在JSP中,我们可以使用Java的内置类和库来完成...
验证码通常包含随机生成的字符集(包括数字和字母),用于区分人与机器。为了提高安全性,通常还会添加干扰线或噪点等元素以增加识别难度。 #### 2.2 随机颜色生成 ```java Color getRandColor(int fc, int bc) { ...
本文将围绕一个特定的正则表达式 `/^([A-Za-z0-9])+$/` 展开讨论,该表达式主要用于验证输入字符串是否仅包含数字和字母。 #### 正则表达式解析 该正则表达式 `/^([A-Za-z0-9])+$/` 可以被细分为几个关键部分进行...
总结,这个J2EE项目展示了如何使用JSP创建一个简单的登录系统,包括用户界面、验证逻辑和登出功能。虽然示例简单,但它是理解Web开发中动态内容生成和用户认证的基础。在实际项目中,还需要考虑更多的安全性和性能...
- **校验码为X的情况**:在某些身份证号码中,校验码可能会以大写字母X表示,这是因为校验码对应的数字是10,但身份证号码只包含数字,所以用X代替。 - **特殊地区的身份证号码**:某些地区可能有特殊的编码规则,...
在JSP(JavaServer Pages)开发过程中,为了确保数据的有效性和安全性,经常需要对用户输入的数据进行合法性检查。其中一种常用的验证方法就是使用正则表达式来进行数据格式的校验。正则表达式是一种强大的文本处理...
【压缩包子文件的文件名称列表】中的"www.pudn.com.txt"可能是一个说明文档或者源码的下载链接,而"jsp校验码"可能是一个JSP文件,包含了具体的代码实现。在这个文件中,你可以看到如何将上述的步骤整合进JSP页面,...
前端验证可能包括检查用户名是否为空,电子邮件格式是否正确,以及密码强度是否符合要求(例如,至少包含数字、字母和特殊字符的组合)。JavaScript可以实时显示错误消息,指导用户更正输入。 **登录页面** 一般...
17. **字符串处理**:包括删除两侧空格、获取字符串长度(不包含两端空格)、过滤特殊字符等,优化数据处理。 18. **日期和时间格式检验**:确保日期和时间输入符合`yyyy-MM-dd`或`yyyy-MM`的格式,便于处理日期和...
9. **自定义验证**:根据业务需求,可能还需要一些自定义的验证规则,例如密码强度验证,通常需要包含大小写字母、数字和特殊字符的组合。 在实现这些验证时,通常会结合客户端(JavaScript、jQuery等)和服务器端...
验证码的本质是生成一段随机的字符串,通常包含字母、数字,有时会加入一些特殊字符,以增加识别难度。这个字符串被发送到客户端(通常是Web浏览器),同时服务器端保存这个字符串的副本,以便后续验证用户输入的...
(3):年龄的校验规则是必须是整数,且在1到120之间。 (4):生日的校验规则是必须在1950-1-1到1990-1-1之间。 (5):所有提示信息均要用到国际化资源文件实现。 (6):注册成功返回success.jsp页面,显示所有...
在这个压缩包文件中,可能包含的是一个简单的JSP实现的注册和登录系统,通过分析描述和标签,我们可以深入理解相关知识点。 1. **JSP基本概念** JSP是基于Java平台的,它允许开发者将HTML或者XML文档和Java代码...
1.17 检验货票号为 1 位字母+6 位数字.. 17 1.18 检验起始货票号必须小于截至货票号. 18 1.19 检验查询条件是否为空,为空则提示"查询条件不能为空!" 19 1.20 检验是不是最短位数的数字,用于模糊查询. 20 1.21 输入...
在checkCharacterType方法中,我们可以看到使用了ASCII码来检测字符的类型,例如数字、小写字母、大写字母和特殊字符。同时,在countLetter方法中,我们可以看到使用了for循环来遍历密码字符串,并统计了密码中不同...
密码必须包含6-20个字母或数字 ``` 四、Interceptor(拦截器)校验 Struts2引入了拦截器的概念,允许在执行Action之前或之后进行操作,包括输入校验。可以自定义一个Interceptor实现输入校验,或者使用已有...
同时,密码策略应要求包含数字、字母等,提高密码强度。 9. **验证与校验**: 在修改密码前,需要用户输入当前密码进行验证。同时,新密码需要通过一定规则验证,如最小长度、最大长度、是否包含特殊字符等。 10....
至于身份证号的验证,中国居民身份证号码为18位,包含地区代码、出生日期、性别码、顺序码和校验码。验证身份证号的正则表达式较为复杂,通常需要额外的逻辑处理,例如: ```regex ^\d{6}(18|19|20)?\d{2}(0[1-9]|1...
密码必须包含6-20个字母或数字 ``` 三、校验规则详解 1. `field`元素:用于指定要校验的Action类属性。 2. `field-validator`元素:定义了针对某个属性的校验器类型。 3. `type`属性:定义校验器的类型,如`...