1、jsp中队校验码的引用代码片段如下:
<tr>
<td align="right" > </td>
<td align="right" height="30">
<label for="verifyCode" class="yonghuming_font">
验证码:
</label>
</td>
<td height="30">
<input type="text" id="verifyCode" name="verifyCode" size="6" />
<img alt="验证码" id="safecode" src="<%=context %>/servlet/ImageServlet">
看不清楚
</td>
</tr>
2、javascript中(写在js文件中也是一样的)刷新图片的方法代码片段如下:
function reloadVerifyCode(){
var timenow = new Date().getTime();
document.getElementById("safecode").src="<%=request.getContextPath()%>/servlet/ImageServlet?d="+timenow;
}
3、xml文件中对图片servlet的配置,代码片段如下:
<!-- 校验码servlet -->
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>ssh.init.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/servlet/ImageServlet</url-pattern>
</servlet-mapping>
4、图片servlet代码如下:
package ssh.init;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class ImageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("***************** random picture created ****************");
this.doPost(request, response);
}
// 生成数字和字母的验证码
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// System.out.println("request path="+request.getContextPath());
//创建一个位于缓冲区的图片,长为68,高为22
BufferedImage img = new BufferedImage(68, 22,BufferedImage.TYPE_INT_RGB);
// 得到该图片的绘图对象
Graphics g = img.getGraphics();
Random r = new Random();
Color c = new Color(200, 150, 255);
g.setColor(c);
// 填充整个图片的颜色
g.fillRect(0, 0, 68, 22);
// 向图片中输出数字和字母
StringBuffer sb = new StringBuffer();
// char[] ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
char[] ch = "abcdefghijklmnopqrstuvwxyz".toCharArray();
int index, len = ch.length;
for (int i = 0; i < 4; i++) {
index = r.nextInt(len);
g.setColor(new Color(r.nextInt(88), r.nextInt(188), r.nextInt(255)));
g.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, 18)); // 输出的字体和大小
g.drawString("" + ch[index], (i * 15) + 3, 18);
// 写什么数字,在图片的什么位置画
sb.append(ch[index]);
}
request.getSession(true).setAttribute("piccode", sb.toString());
ImageIO.write(img, "JPG", response.getOutputStream());
}
@SuppressWarnings("unused")
private void writeLog(String msg){
File f = new File("E:/Program Files/tomcat6.0.20/webapps/ROOT/temp.log");
if(!f.exists()){
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedWriter output = null;
try {
output = new BufferedWriter(new FileWriter(f));
} catch (IOException e) {
e.printStackTrace();
}
try {
output.write(msg);
} catch (IOException e) {
e.printStackTrace();
}
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5、接受登录请求的Action对校验码处理的代码片段如下:
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
/**
* 验证码校验
* */
String icp = (String) session.getAttribute("piccode");
if (icp==null && !Tools.isEmpty(verifyCode)){
icp = verifyCode;
}
if(Tools.isEmpty(verifyCode)|| !icp.equalsIgnoreCase(verifyCode)){
request.setAttribute("errMessage","验证码错误,请重新输入");
return LOGIN;
}
if (!Tools.isEmpty(icp) && !Tools.isEmpty(verifyCode)) {
if (!verifyCode.equalsIgnoreCase(icp)) {
request.setAttribute("errMessage","验证码错误,请重新输入");
return LOGIN;
}
}
6、工具类Tools的代码如下:
package ssh.comm.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class Tools
{
public Tools()
{
}
public static boolean isEmpty(String str)
{
return str == null || str.trim().length() == 0;
}
public static boolean isEmpty(Object obj_str)
{
return obj_str == null || isEmpty(obj_str.toString());
}
public static boolean isEmpty(Object objs[])
{
return objs == null || objs.length == 0;
}
public static boolean isEmpty(String strs[])
{
if(strs == null)
return true;
String as[] = strs;
int i = 0;
for(int j = as.length; i < j; i++)
{
String str = as[i];
if(str == null || str.trim().length() == 0)
return true;
}
return false;
}
@SuppressWarnings("unchecked")
public static boolean isEmpty(Map map)
{
return map == null || map.isEmpty();
}
@SuppressWarnings("unchecked")
public static boolean isEmpty(Collection c)
{
return c == null || c.isEmpty();
}
public static boolean equals(Object src, Object dest)
{
if(src != null)
return src.equals(dest);
return src == dest;
}
public static boolean notEquals(Object src, Object dest)
{
return !equals(src, dest);
}
public static long getTodayDate()
{
Date nowDate = new Date();
String nDate = (new SimpleDateFormat("yyyyMMddHHmmss")).format(nowDate);
long endDate = Long.parseLong(nDate);
return endDate;
}
public static String formatDateTime(String dateTime)
{
if(!isEmpty(dateTime))
return dateTime.replaceAll(":", "").replaceAll("-", "").replaceAll(" ", "");
else
return dateTime;
}
public static Date stringToDate(String dateTime)
throws ParseException
{
Date date = null;
if(!isEmpty(dateTime))
{
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
date = dateformat.parse(dateTime);
return date;
} else
{
return date;
}
}
public static String getStringDate()
throws ParseException
{
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
return dateString;
}
@SuppressWarnings("unchecked")
public static String[] quChu(String arr[])
{
List list = new ArrayList();
for(int i = 0; i < arr.length; i++)
if(!list.contains(arr[i]))
list.add(arr[i]);
return (String[])list.toArray(new String[list.size()]);
}
public static String validateToStr(Object obj)
{
return obj != null ? obj.toString().trim() : "";
}
}
分享到:
相关推荐
在IT领域,校验码是一种用于检测数据传输错误或存储媒介错误的重要技术。"16进制和ASCII码校验码计算工具"是一款专门用于计算校验码的实用程序,它能够帮助用户验证数据的完整性和准确性。下面将详细介绍这款工具...
这种安全措施涉及到两种类型的校验码:一种是包含数字、字母和汉字的文字校验码,另一种是拖拉式图片校验码。这两种校验码都是为了防止自动化的恶意登录尝试,如机器人或脚本,从而保护用户账户的安全。 文字校验码...
因此,此正则表达式的作用是校验密码长度在8到31个字符之间,并且只包含字母、数字和下划线。 #### 2. 使用Pattern和Matcher类 为了应用上述正则表达式,代码中使用了Java中的`Pattern`和`Matcher`类。 - **...
身份证校验码,也称为身份证号码的最后一位校验位,是用于确保身份证号码正确性的关键部分。在中华人民共和国居民身份证中,这个校验码是由前17位数字经过特定算法计算得出的,用于验证整个身份证号码的合法性。在本...
校验码通常是一串随机的字母或数字,与图片结合,用户需要输入看到的验证码文字以证明其是人而不是机器。 在这个"ASP.NET程序中实现校验码图像生成.rar"压缩包中,包含了一个实现这一功能的示例。主要涉及以下几个...
校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。 公式如下: ∑(a[i]*W[i]) mod 11 ( i = 2, 3, ..., 18 ) (1) "*" 表示乘号 i--------表示身份证号码每一位的序号,从右...
如果余数为其他值,则校验位为11减去余数,得到的结果是字母或数字。例如,如果总和模11的余数为2,那么校验位就是11 - 2 = 9。 在实际应用中,这个计算过程通常被编程实现,以便快速准确地验证VIN。在提供的“VIN...
提供网站登录时需要设置的校验码源码,程序员可依据此源码设计出4个字母或数字的校验码生成器!
在Android开发中,生成带校验码的卡号是一个常见的需求,这涉及到一系列与数据处理、安全性以及性能优化相关的技术。本文将详细讲解如何在Android环境中实现这些功能,并结合提供的"ID-generator-master"压缩包文件...
- 求和结果除以11,得到的余数对应于1到10或者X的校验码值,如果余数为0,则校验码为10,但为了保持18位,用罗马字母X表示。 3. **身份证验证程序的功能**: - 验证号码长度:确保输入的号码是18位。 - 检查...
本文将深入探讨数制与码制,并专门阐述奇偶校验码的基本原理及其在错误检测中的应用。 首先,我们需要明确数制和码制的定义。数制,或称数字系统,是用来表示数字的一套符号体系。常见的数制包括我们日常生活中使用...
- `\w`:匹配任何字母数字字符,等价于 `[a-zA-Z0-9_]`。 - `{n,m}`:指定匹配前面的表达式的最小和最大次数。 ### 二、密码强度验证 #### 2.1 验证密码长度 给定代码中的正则表达式 `new RegExp("^\\w{8,31}$")` ...
例如,一个简单的正则表达式可以检查密码是否至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符: ```javascript var password = "YourPassword"; var regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@...
4. **校验码**:最后一位数字或大写字母X作为校验码,用于验证前面17位数字的有效性。 ### 二、校验码计算方法 校验码的计算方法如下: 1. 将前17位数字与对应的权重相乘后求和。 - 权重数组为 [7, 9, 10, 5, 8,...
在网上看到关于密码验证的资源,有一个40多分,简直坑爹,然后自己在网上找到了一个资源,修改了一下就可以用了,里面包含大小写、数字、特殊字符、四个都有,每一个有一个就可以了,然后去验证就行了,java,...
5、密码中不能包含有连续四位及以上重复字符(含:大写字母、小写字母、数字、特殊符号),字母不区分大小写;(如:密码中不能包含8888、9999、aaaa 或AAAA或BbbB或 $$$$等四位及以上的重复字符)。 6、不区分大小写...
这个压缩包“Vin校验码计算源码.rar”包含了VB6(Visual Basic 6)编程语言编写的源代码,用于根据标准方法计算和验证VIN码。 在汽车行业中,VIN码扮演着至关重要的角色,因为它包含了关于车辆制造厂商、生产年份、...
### 奇偶校验码概述 #### 一、什么是奇偶校验码? 奇偶校验码是一种基本且常见的检错技术,广泛应用于数据通信和存储系统中,以确保数据传输过程中的完整性。该技术通过增加一个额外的校验位来实现对原始数据的校验...
正则表达式可以用来检测字符串是否符合特定的规则,比如在这里,我们需要检查密码是否包含了连续的字母或数字。在C#中,我们可以创建一个正则表达式来识别这些模式,并在用户尝试设置新密码时进行验证。 以下是一个...