jsp验证码生成以及刷新

合集下载

验证码生成算法 -回复

验证码生成算法 -回复

验证码生成算法-回复验证码生成算法是指用于验证用户身份的一种技术手段,通过生成一串随机的字符或数字,要求用户输入正确才能通过验证。

随着网络技术的发展,验证码算法应用得越来越广泛,可以用于登录验证、注册账户、防止机器人恶意攻击等场景。

本文将从生成原理、常见算法、安全性等方面一步一步介绍验证码生成算法。

一、生成原理验证码生成算法的基本原理是通过生成随机的字符或数字,远程传递给客户端,并要求用户输入正确的验证码进行验证。

这个过程一般包括以下几个步骤:1. 生成随机字符或数字集合:首先需要确定验证码的内容,一般为字母、数字或字母数字组合。

然后从这个集合中随机选择若干个字符或数字组成验证码。

2. 绘制验证码图片:将生成的验证码绘制到一张图片上,这样用户就需要通过观察图片中的字符或数字来输入正确的验证码。

3. 将验证码传递给客户端:通过网络传输将生成的验证码发送到客户端,一般是以图片的形式进行传递。

4. 用户输入验证:用户在登录或注册界面中看到验证码图片后,需要输入相应的验证码,系统则会对用户输入的验证码和生成的验证码进行比较,若输入正确则验证通过。

二、常见验证码生成算法1. 普通随机算法:这是最直观的一种生成验证码的算法,即从字符或数字集合中随机选择若干个字符或数字组成验证码。

这种算法简单易懂,但存在安全性较低的问题,因为生成的验证码很容易被机器人破解。

2. 扭曲算法:为了增加验证码的安全性,可以对生成的验证码进行扭曲处理,使得验证码不易被机器人自动识别。

扭曲算法通常是通过对验证码图片进行一些形变操作,如扭曲、旋转、拉伸等,使得验证码不易被自动识别。

3. 噪点算法:为了进一步增加验证码的安全性,可以在验证码图片上添加一些噪点,使得验证码更难以被机器人自动识别。

噪点可以是干扰线、干扰点等,通过增加干扰元素可以有效防止机器人攻击。

4. 字体变化算法:为了增加验证码的对抗性,可以对生成的验证码进行字体变化,使得验证码更不易被破解。

jsp页面验证码

jsp页面验证码

AJAX+jsp无刷新验证码实例(完整代码)1.login.jsp<%@ pagelanguage="java"contentType="text/html;charset=gb2312"import = "java.util.*"import = "java.sql.*"import = "java.text.*"import = "java.io.*"%><%@ include file="../conn.jsp"%><%request.setCharacterEncoding("gb2312");%><%String username=request.getParameter("name");String pass=request.getParameter("pws");String num=request.getParameter("num");String random=(String)session.getAttribute("random");if(num!=null&&random!=null){if(num.equals(random)){Statement stmt=conn.createStatement();ResultSet rs=stmt.executeQuery("select * from admin where admin='"+username+"' and pass='"+pass+"'");if(rs.next()){String id=rs.getString("id");session.setAttribute("id",id);response.sendRedirect("admin.jsp");}rs.close();stmt.close();conn.close();}}%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>两岸咖啡</title><link href="../include/style.css" rel="stylesheet" type="text/css" /><script src="net.js"></script><script type="text/javascript">var times=0;function subform(){var gtext=this.req.responseText;var info=document.getElementById("info");if(gtext.indexOf("validate_successful")!=-1){//info.innerHTML="<font color=green>验证码通过</font>";document.forms["form"].submit();//当得到的值表示合法,则验证码通过。

生成验证码的几种方式

生成验证码的几种方式

⽣成验证码的⼏种⽅式⽣成验证码的⼏种⽅式1,在jsp页⾯中直接⽣成验证码image.jsp源码://image.jsp<%@ page contentType="image/jpeg"import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"pageEncoding="GBK"%><%!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");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);// 在内存中创建图象// 通过这⾥可以修改图⽚⼤⼩int width = 85, height = 23;BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 获取图形上下⽂// g相当于笔Graphics g = image.getGraphics();//⽣成随机类Random random = new Random();// 设定背景⾊g.setColor(getRandColor(200, 250));// 画⼀个实⼼的长⽅,作为北京g.fillRect(0, 0, width, height);//设定字体g.setFont(new Font("⿊体", Font.PLAIN, 18));//画边框g.setColor(Color.BLUE);g.drawRect(0,0,width-1,height-1);// 随机产⽣155条⼲扰线,使图象中的认证码不易被其它程序探测到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);}// 取随机产⽣的认证码(4位数字)//String rand = request.getParameter("rand");//rand = rand.substring(0,rand.indexOf("."));String sRand = "";// 如果要使⽤中⽂,必须定义字库,可以使⽤数组进⾏定义// 这⾥直接写中⽂会出乱码,必须将中⽂转换为unicode编码String[] str = { "A", "B", "C", "D", "E", "F", "G", "H", "J", "K","L", "M", "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X","Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j","k", "m", "n", "p", "s", "t", "u", "v", "w", "x", "y", "z","1", "2", "3", "4", "5", "6", "7", "8", "9" };for (int i = 0; i < 5; i++) {String rand = str[random.nextInt(str.length)];sRand += rand;// 将认证码显⽰到图象中g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));//调⽤函数出来的颜⾊相同,可能是因为种⼦太接近,所以只能直接⽣成 g.drawString(rand, 16 * i + 6, 19);}// 将认证码存⼊SESSIONsession.setAttribute("rand", sRand);// 图象⽣效g.dispose();// 输出图象到页⾯ImageIO.write(image, "JPEG", response.getOutputStream());out.clear();out = pageContext.pushBody();%>login.jsp源码(使⽤验证码的页⾯)://使⽤验证码的页⾯login.jsp<%@ page contentType="text/html" pageEncoding="GBK"%><html><head><title>登陆页⾯</title><script>function reloadImage() {document.getElementById('identity').src = 'image.jsp?ts=' + new Date().getTime();}</script></head><body><center><%// 乱码解决request.setCharacterEncoding("GBK");%><h1>登陆程序</h1><hr><%=request.getAttribute("info") != null ? request.getAttribute("info") : ""%><form action="check.jsp" method="post">⽤户ID:<input type="text" name="mid"><br>密码:<input type="password" name="password"><br>验证码:<input type="text" name="code" maxlength="5" size="5"><img src="image.jsp" id="identity" onclick="reloadImage()" title="看不清,点击换⼀张"> <br><input type="submit" value="登陆"><input type="reset" value="重置"></form></center></body></html>效果如下:2,使⽤Servlet⽣成验证码IdentityServlet.java源码://IdentityServlet.java代码如下:package com.helloweenvsfei.servlet;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGImageEncoder;public class IdentityServlet extends HttpServlet {/****/private static final long serialVersionUID = -479885884254942306L;public static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M','N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };public static Random random = new Random();public static String getRandomString() {StringBuffer buffer = new StringBuffer();for (int i = 0; i < 6; i++) {buffer.append(CHARS[random.nextInt(CHARS.length)]);}return buffer.toString();}public static Color getRandomColor() {return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));}public static Color getReverseColor(Color c) {return new Color(255 - c.getRed(), 255 - c.getGreen(), 255 - c.getBlue());}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("image/jpeg");String randomString = getRandomString();request.getSession(true).setAttribute("randomString", randomString);int width = 100;int height = 30;Color color = getRandomColor();Color reverse = getReverseColor(color);BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics2D g = bi.createGraphics();g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16));g.setColor(color);g.fillRect(0, 0, width, height);g.setColor(reverse);g.drawString(randomString, 18, 20);for (int i = 0, n = random.nextInt(100); i < n; i++) {g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);}// 转成JPEG格式ServletOutputStream out = response.getOutputStream();JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);encoder.encode(bi);out.flush();}public static void main(String[] args) {System.out.println(getRandomString());}}Web..xml源码://Web.xml的配置为:<servlet><servlet-name>IdentityServlet</servlet-name><servlet-class>com.helloweenvsfei.servlet.IdentityServlet</servlet-class></servlet><servlet-mapping><servlet-name>IdentityServlet</servlet-name><url-pattern>/servlet/IdentityServlet</url-pattern></servlet-mapping>identity.html源码://测试页⾯identity.html为:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>identity.html</title><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="this is my page"><meta http-equiv="content-type" content="text/html; charset=GB18030"><!--<link rel="stylesheet" type="text/css" href="./styles.css">--></head><body><script>function reloadImage() {document.getElementById('btn').disabled = true;document.getElementById('identity').src='servlet/IdentityServlet?ts=' + new Date().getTime(); }</script><img src="servlet/IdentityServlet" id="identity" onload="btn.disabled = false; "/> <input type=button value=" 换个图⽚ " onclick="reloadImage()" id="btn"></body></html>3,在Struts2应⽤中⽣成验证码RandomNumUtil.java源码://RandomNumUtil.javapackage org.ml.util;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.util.Random;import javax.imageio.ImageIO;import javax.imageio.stream.ImageOutputStream;public class RandomNumUtil {public static final char[] CHARS = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M','N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z','2', '3', '4', '5', '6', '7', '8','9','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm','n', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};private ByteArrayInputStream image;// 图像private String str;// 验证码/*** 构造⽅法调⽤初始化属性⽅法*/private RandomNumUtil() {init();}/*** 取得RandomNumUtil实例*/public static RandomNumUtil Instance() {return new RandomNumUtil();}/*** 取得验证码图⽚*/public ByteArrayInputStream getImage() {return this.image;}/*** 取得图⽚的验证码*/public String getString() {return this.str;}/*** 初始化属性否具体⽅法*/private void init() {// 在内存中创建图象int width = 85, height = 18;//设置图形的⾼度和宽度,以及RGB类型BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 获取图形上下⽂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));// 随机产⽣255条⼲扰线,使图象中的认证码不易被其它程序探测到g.setColor(getRandColor(160, 200));for (int i = 0; i < 255; 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);}// 取随机产⽣的认证码(6位数字)StringBuffer sRand = new StringBuffer();for (int i = 0; i < 6; i++) {String rand = String.valueOf(CHARS[random.nextInt(CHARS.length-1)]);//从字符数组中随机产⽣⼀个字符sRand.append(rand);// 将认证码显⽰到图象中g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));// 调⽤函数出来的颜⾊相同,可能是因为种⼦太接近,所以只能直接⽣成g.drawString(rand, 13 * i + 6, 17);}// 赋值验证码this.str = sRand.toString();// 图象⽣效g.dispose();//下⾯将⽣成的图形转变为图⽚ByteArrayOutputStream output = new ByteArrayOutputStream();ByteArrayInputStream input = null;try {ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);ImageIO.write(image, "JPEG", imageOut);//将图像按JPEG格式写⼊到imageOut中,即存⼊到output的字节流中 imageOut.close();//关闭写⼊流input = new ByteArrayInputStream(output.toByteArray());//input读取output中的图像信息} catch (Exception e) {System.out.println("验证码图⽚产⽣出现错误:" + e.toString());}this.image = input;/* 赋值图像 */}/** 给定范围获得随机颜⾊*/private 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);}}RandomAction.java源码://RandomAction.java的代码:package org.ml.action;import java.io.ByteArrayInputStream;import org.ml.util.RandomNumUtil;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class RandomAction extends ActionSupport {private ByteArrayInputStream inputStream;public String execute() throws Exception {RandomNumUtil rdnu = RandomNumUtil.Instance();//取得随机验证码产⽣类的对象this.setInputStream(rdnu.getImage());// 取得带有随机字符串的图⽚ActionContext.getContext().getSession().put("random", rdnu.getString());// 取得随机字符串放⼊HttpSession return SUCCESS;}public void setInputStream(ByteArrayInputStream inputStream) {this.inputStream = inputStream;}public ByteArrayInputStream getInputStream() {return inputStream;}}struts.xml配置://struts.xml配置为:<!-- Random验证码 --><action name="rand" class="org.ml.action.RandomAction"><result type="stream" name="success"><param name="contentType">image/JPEG</param><param name="inputName">inputStream</param></result></action>HTML中的表单源码://HTML中的表单代码为:<tr height="35"><td width="14%" class="top_hui_text"><span class="login_txt">验证码:</span></td><td colspan="2" class="top_hui_text"><input type="text" name="rand" id="rand" size="6"maxlength="6"><script type="text/javascript">function changeValidateCode(obj) {//获取当前的时间作为参数,⽆具体意义var timenow = new Date().getTime();//每次请求需要⼀个不同的参数,否则可能会返回同样的验证码//这和浏览器的缓存机制有关系,也可以把页⾯设置为不缓存,这样就不⽤这个参数了。

jsp实现验证码

jsp实现验证码

jsp实现验证码在web开发领域⾥⾯,验证码是⼀个⽐较常见的功能,⽽归根到底,验证码其实就是⼀组随机数,或者是⼀个随机算术⼀、基本知识1、为什么需要验证码?验证码,很多时候出现在注册页⾯或者登陆界⾯,在这些页⾯中有可能会出现恶意注册和暴⼒破解,这时候验证码可以有效防范这些攻击。

所以,总的来说,验证码很多时候是为了防⽌不法分⼦对⽹站进⾏恶意的注册和攻击,是⼀种有效的拦截⼿段。

2、验证码的⼯作原理 ⾸先,我们要明确⼀点就是,验证码实际是在服务器端产⽣的,因为如果在前端参数的话并不能有效拦截,因此很多时候,在拦截时我们都需要在服务器端进⾏相关操作,防⽌⿊客绕过前端验证直接⾮法访问。

验证码的⼯作原理其实⽅⼏个步骤:⾸先,服务端随机产⽣⼏个随机数或者随机算式,然后通过session对象将数据传输到客户端,客户端输⼊验证码,通过r表单将数据提交到服务器,服务器提取数据之后和产⽣的随机数字或者算式的结果对⽐,以此进⾏验证。

当然,很多时候,简单的验证码很容易被图像识别软件破解,所以现在很多时候更流⾏短信验证等⽅式,但是,⼀下讨论的均是简单的数字图⽚验证。

⼆、验证码的实现过程1、⾸先,验证码其实就是在服务端产⽣⼀张带有验证码数字或者算式的图⽚,所以,在这个过程要⽤到gui知识,具体请先看⼀下代码//1、验证码界⾯//验证码的宽和⾼int width = 70;int height = 30;/**图像缓冲对象(注意:在多次对某个对象操作时,为了提⾼效率,很多时候选择⽤缓冲对象来进⾏操作,因为缓冲类的对象很多时候是可以即时改变对象的数据的)*/BufferedImage bufferedImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);//创建图像操作对象,⽤于操作验证码图⽚对象Graphics2D g = bufferedImage.createGraphics();//创建字体对象⽅便操作图像字体的属性Font font = new Font("Times New Roman",Font.PLAIN,18);g.setFont(font);//设置相关颜⾊等等g.setColor(Color.BLACK);g.drawRect(0,0,width-1,height-1);g.setColor(Color.GRAY); 以上创建了⼀个基本的验证码图⽚,注意很多时候如果要反复对象对某个对象进⾏修改操作时(如某个字符串,需要反复进⾏拼接操作时,为提⾼性能,⼀般选择⽤缓冲类的对象进⾏操作之后再转换为相关对象)。

Jsp-图片验证码及刷新

Jsp-图片验证码及刷新

1.图片验证码的实现主要的技术点是如何生成一个图片。

生成图片可以使用java.awt包下的类来实现。

我们先写一个简单的生成图片的程序HelloImage.java。

以下是代码部分。

(是我在做留言板项目时的部分代码)"HelloImage .java"view plaincopy to clipboardprint?package liuyanban;import java.awt.Color;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;/*** 生成图片*/public class HelloImage {public static void main(String[] args){BufferedImage image = new BufferedImage(80, 50,BufferedImage.TYPE_INT_RGB);//建立BufferedImage对象。

指定图片的长度宽度和色彩。

Graphics g = image.getGraphics();//取得Graphics对象,用来绘制图片。

g.setColor(new Color(255,255,255));//绘制图片背景和文字。

g.fillRect(0, 0, 80, 25);g.setColor(new Color(0,0,0));g.drawString("HelloImage",6,16);g.dispose();//释放Graphics对象所占用的资源。

try{ImageIO.write(image, "jpeg", new File("C:\\helloImage.jpeg"));//通过ImageIO对象的write静态方法将图片输出。

js逆向验证码验证原理

js逆向验证码验证原理

js逆向验证码验证原理
JavaScript逆向验证码验证原理主要涉及到对网页中的验证码机制进行解析和逆向工程,从而获取到验证码的生成、加密和验证方式。

以下是一些常见的验证码验证原理及其逆向方法:
1. 图片验证码:这种验证码通常以图片的形式出现,用户需要识别图片中的信息(如字母、数字、图案等)并输入到表单中。

对于这类验证码,逆向过程通常包括识别图片中的信息,可以使用图像识别技术(如OCR)或者机器学习算法来实现。

2. 滑动验证码:这种验证码要求用户按照指定的路径或轨迹滑动鼠标或触摸屏来完成验证。

逆向这类验证码需要分析滑动轨迹的生成和验证方式,可以通过模拟滑动操作并生成相应的轨迹数据来绕过验证。

3. 逻辑验证码:这种验证码要求用户解答一些逻辑问题或进行简单的数学计算。

逆向这类验证码需要理解问题的逻辑和计算方法,可以通过编写程序来自动解答问题。

在逆向验证码的过程中,通常需要使用一些工具和技术,如浏览器开发者工具、网络抓包工具、JavaScript调试器等。

这些工具可以帮助分析网页的结构和行为,定位验证码相关的代码和数据,以及模拟用户操作进行验证。

需要注意的是,逆向验证码验证原理可能涉及到法律和道德问题。

在没有得到合法授权的情况下,对网站进行逆向工程可能违反相关法律法规和道德准则。

因此,在进行相关操作时,请务必遵守法律法规和道德规范。

验证码自动刷新机制

验证码自动刷新机制

验证码自动刷新机制验证码自动刷新机制随着互联网的快速发展,验证码作为一种有效的身份验证方式被广泛应用于各个领域,比如注册、登录、支付等。

然而,验证码的过期时间往往设置得过短,给用户带来了不便。

为了解决这个问题,验证码自动刷新机制应运而生。

验证码自动刷新机制是指在用户输入验证码之前,系统会自动更新验证码,以延长其有效期。

这个机制的目的是提高用户体验,减少因验证码过期而造成的不便和烦恼。

首先,验证码自动刷新机制能够有效降低用户的等待时间。

传统的验证码过期时间往往较短,用户在填写完其他信息后,验证码可能已经过期。

这就要求用户再次请求验证码,等待新的验证码发送到手机或邮箱。

而有了自动刷新机制,用户在填写完其他信息后,即可直接提交,不需要再----宋停云与您分享----等待新的验证码。

这大大提高了用户的操作效率,减少了等待时间。

其次,验证码自动刷新机制能够避免用户因操作疏忽而导致验证码过期的情况。

有时候,用户可能会输入错误的验证码,或者长时间未提交造成验证码过期。

而有了自动刷新机制,即使用户输入了错误的验证码,系统也会自动刷新验证码,给用户一次重新输入的机会。

这样,用户就不会因为一次操作失误就需要重新请求验证码,减少了用户的烦恼。

此外,验证码自动刷新机制还可以有效防止验证码被恶意盗用。

在传统的验证码机制中,一旦验证码发送到用户的手机或邮箱,就存在被恶意盗用的风险。

而有了自动刷新机制,验证码的有效期变长,即使被盗用,也会很快失效。

这就增加了验证码的安全性,保护用户的个人信息不被盗用。

----宋停云与您分享----然而,验证码自动刷新机制也需要注意一些问题。

首先,自动刷新机制应该合理设置刷新时间,既要保证验证码的有效期足够长,又要避免验证码长时间有效导致的安全问题。

其次,系统应该对用户的操作进行合理判断,避免过度刷新验证码,给用户带来困扰。

最后,验证码自动刷新机制应该与系统的其他功能相协调,确保系统的正常运行。

JSP验证码大全之验证码使用与乱码解决

JSP验证码大全之验证码使用与乱码解决

JSP验证码大全之验证码使用与乱码解决2009-06-22 14:51 以上两篇文章的内容介绍了有关JSP中产生数字验证码跟中文验证码的源代码并做了分析,本文中介绍如何对以上产生的数字跟中文验证码进行使用,以及如何解决中文验证码的乱码无法正确验证的问题。

对验证码的使用分为两个部分,分别为验证码的调用和验证过程,以下分别做说明介绍。

三、在JSP中调用验证码使用验证码直接在图片处调用产生验证码的JSP文件即可,同时在刷新验证码按钮处的js代码中使用JSP验证码文件,页面源码如下。

<form id="dForm" method=post action="val.jsp"><ul class="sFrm"><li><b></b><img id="code" border=0 src="Num.jsp"/><input type="button" value="看不清,换一张" onClick="document.getElementById('code').src='ColorChinese.jsp'"><div class="clear0"></div></li> <li><b>验证码</b><input type="text" name="input" maxlength=8 value="" styleClass="sIpt itemFm "><div class="clear0"></div></li><li class="bar"><b></b><input type="submit" value="验证测试" styleClass="logbtn3"></li></ul></form>四、在JSP中验证码的验证过程以及中文乱码处理获取用户输入的验证码并与Session中的验证码比较,相同即通过,否则拒绝,对于JSP中中文验证码的处理注意要在页面中定义JSP页面编码跟获取Session的字符编码一致,此处使用的是统一的GB2312编码,否则将出现验证码无法成功验证的情况。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档