图片验证码 java

来源:互联网 发布:thinkpad e系列 知乎 编辑:程序博客网 时间:2024/05/17 08:59

下面是一个简单的找回密码验证:jsp就动态的


java代码如下,生成验证码图片:

package com.friendcom.dongzuo.web.servlet;


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;


import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


import com.friendcom.dongzuo.web.WebConstants;


@WebServlet(urlPatterns = { "/servlet/ImageValidate" }, asyncSupported = true, loadOnStartup = -1, name = "ImageValidate", displayName = "ImageValidate")
public class ImageValidate extends HttpServlet {


private static final long serialVersionUID = 1L;


/**
* Constructor of the object.
*/
public ImageValidate() {
super();
}

public void destroy() {
super.destroy(); // Just puts "destroy" string in log
}

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
response.setHeader("Pragma", "no-cache");
response.addHeader("Cache-Control", "must-revalidate");
response.addHeader("Cache-Control", "no-cache");
response.addHeader("Cache-Control", "no-store");
response.setDateHeader("Expires", 0);
response.setHeader("Content-Type", "image/jpeg");
// 在内存中创建图象
int width = 60, height = 26;
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.CENTER_BASELINE, 18));
// 画边框
// g.setColor(new Color());
// g.drawRect(0,0,width-1,height-1);
// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 40; 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 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 + 6, 18);
}
// 将认证码存入SESSION
HttpSession session = request.getSession();
session.setAttribute(WebConstants.LOGIN_IMAGE_VALID, sRand);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());


}


/**
* 给定范围获得随机颜色

* @param fc
* @param bc
* @return
*/
private static 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);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {


response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println("  <BODY>");
out.print("    This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}

public void init() throws ServletException {
// Put your code here
}

}


jsp and js:

//调用生成验证码图片的方法
function changeValidateImage() {
$("#validateImage").attr("src",
"servlet/ImageValidate?data=" + new Date().getTime());
}


//密码找回
function findpass(){
$(".dialog").remove();
$(".dialog-overlay").remove();
new Dialog('<div id="findpow"><form action="" method="post" name="formfindpass" id="formfindpass"><ul><li class="l_name">找回密码</li><li class="l_pow"><input type="text" onkeydown="if (event.keyCode==1) {}" onblur="if(this.value==\'\')value=\'登入账号关联邮箱\';" onfocus="if(this.value==\'登入账号关联邮箱\')value=\'\';" value="登入账号关联邮箱" name="useremail" id="useremail"></li><li class="l_yz1"><input type="text" onkeydown="if (event.keyCode==1) {}" onblur="if(this.value==\'\')value=\'验证码\';" onfocus="if(this.value==\'验证码\')value=\'\';" value="验证码" name="captcha" id="captcha"> </li><li class="l_yz2"><a href="#"><img src="skin_images/ico.jpg" id="validateImage" onclick="changeValidateImage()" style="cursor:pointer;"/></a></li><li class="l_btn"><a href="javascript:chk_findpass();"><img src="skin_images/m_btn_2.jpg" /></a></li></ul></form></div>',{noneborder:1}).show();

//此处必须进行调用。否则加载后,无法显示
changeValidateImage();
}


//密码找回验证
function chk_findpass(){
alert("jdhjd");
if($("#useremail").val()==''||$("#useremail").val()=='登入账号关联邮箱'){
new Dialog('<div style="width:280px; height:100px;line-height:100px;text-align:center;">请输入关联邮箱.</div>',{noneborder:0,beforeClose:function(){$("#useremail").focus();return true;}}).show();
return;
}

//对电子邮件的验证
var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
if(!myreg.test($("#useremail").val()))
{
new Dialog('<div style="width:280px;height:100px;line-height:100px;text-align:center;">输入的邮箱格式不正确,请重新输入.</div>',{noneborder:0,beforeClose:function(){$("#useremail").focus();return true;}}).show();
return;
}

//验证邮箱是否存在
$.ajax({
type : "post",
url : "checkEmail_Ajax.htm",
data : {email:$("#useremail").val()},
async:false,
success : function(data) {
if(data=="error") {
new Dialog('<div style="width:280px; height:100px;line-height:100px;text-align:center;">您输入的邮箱不在.</div>',{noneborder:0,beforeClose:function(){$("#useremail").focus();return true;}}).show();
return;
}
if($("#captcha").val()==''||$("#captcha").val()=='验证码'){
new Dialog('<div style="width:280px; height:100px;line-height:100px;text-align:center;">请输入验证码.</div>',{noneborder:0,beforeClose:function(){$("#captcha").focus();return true;}}).show();
return;
}
//产生一个新的密码,发送的用户邮箱,并同时更新数据库
$.ajax({
type : "post",
url : "createNewPwd_Ajax.htm",
data : {email:$("#useremail").val(),code:$("#captcha").val()},
success : function(data) {
if(data=="codeError") {
new Dialog('<div style="width:280px; height:100px;line-height:100px;text-align:center;">验证码错误,请重新输入.</div>',{noneborder:0,beforeClose:function(){$("#captcha").focus();return true;}}).show();
return;
} else {
//通过验证进行下一步  
findpass_2();
}

}
});
}
});


//密码找回第二步
function findpass_2(){
$(".dialog").remove();
$(".dialog-overlay").remove();
// new Dialog('<div id="forgot"><ul><li>找回密码邮件已经发送至您关联的邮箱 <br /> <span>请查收</span> <br /> <font>如未收到邮件请重新操作</font></li><li class="l_btn"><a href="javascript:findpass_3();"><img src="skin_images/m_btn_2.jpg" /></a></li></ul></div>',{noneborder:1}).show();
//直接起第四步
new Dialog('<div id="forgot"><ul><li>找回密码邮件已经发送至您关联的邮箱 <br /> <span>请查收</span> <br /> <font>如未收到邮件请重新操作</font></li><li class="l_btn"><a href="javascript:findpass_4();"><img src="skin_images/m_btn_2.jpg" /></a></li></ul></div>',{noneborder:1}).show();
}


//密码找回第三步
function findpass_3(){
$(".dialog").remove();
$(".dialog-overlay").remove();
new Dialog('<div id="updatepow"><ul><li class="l_name">请填写新密码</li><li class="l_pow"><input type="text" onkeydown="if (event.keyCode==1) {}" onblur="if(this.value==\'\')value=\'填写新密码\';" onfocus="if(this.value==\'填写新密码\')value=\'\';" value="填写新密码" name="userpass" id="userpass" onkeyup="this.type=\'password\'"></li><li class="l_pow"><input type="text" onkeydown="if (event.keyCode==1) {}" onblur="if(this.value==\'\')value=\'再次填写确认新密码\';" onfocus="if(this.value==\'再次填写确认新密码\')value=\'\';" value="再次填写确认新密码" name="reuserpass" id="reuserpass" onkeyup="this.type=\'password\'"></li><li class="l_btn"><a href="javascript:chk_findpass_3();"><img src="skin_images/m_btn_2.jpg" /></a></li></ul></div>',{noneborder:1}).show();
}


//登录验证
function chk_findpass_3(){
if($("#userpass").val()==''||$("#userpass").val()=='填写新密码'){
new Dialog('<div style="width:280px; height:100px;line-height:100px;text-align:center;">请填写新密码.</div>',{noneborder:0,beforeClose:function(){$("#userpass").focus();return true;}}).show();
return;
}
if($("#reuserpass").val()==''||$("#reuserpass").val()=='再次确认密码'){
new Dialog('<div style="width:280px; height:100px;line-height:100px;text-align:center;">再次确认密码.</div>',{noneborder:0,beforeClose:function(){$("#reuserpass").focus();return true;}}).show();
return;
}
if($("#userpass").val()!=$("#reuserpass").val()){
new Dialog('<div style="width:280px; height:100px;line-height:100px;text-align:center;">确认密码与新密码不符,请重新输入.</div>',{noneborder:0,beforeClose:function(){$("#reuserpass").focus();return true;}}).show();
return;
}

//完成转入下一步
findpass_4();
}




//密码找回第四步
function findpass_4(){
$(".dialog").remove();
$(".dialog-overlay").remove();
new Dialog('<div id="forgot_succ"><ul><li>您的密码已经成功修改,继续轻松享受购物生活,如不确认页面将在15秒后自动跳转至购物插页。<br /> <span>00:<b id="findtxt" stxt="15">15</b></span> </li><li class="l_btn"><a href="javascript:memberlogin();"><img src="skin_images/m_btn_1.jpg" /></a></li></ul></div>',{noneborder:1,time:17000}).show();
setTimeout("timetxtout('findtxt')",1000);
}


//倒计时
function timetxtout(s){
if($("#"+s).attr("stxt")!='0'){
var stxt=parseInt($("#"+s).attr("stxt"))-1;
if(stxt<10) stxt="0" + stxt;
$("#"+s).attr("stxt",(parseInt($("#"+s).attr("stxt"))-1));
$("#"+s).html(stxt);
setTimeout("timetxtout('"+s+"')",1000);
}else{
location.href='list.htm';
//closedig();
}
}






0 0
原创粉丝点击