JSP验证码大全之中文验证码(源码)
验证码源代码(纯数字、字母数字组合、常用498个汉字)

网站中的验证码源代码(纯数字、字母数字组合、常用498个汉字)新建一个aspx页面,源里面不写任何入代码(假如aspx页面为yanzhengma1.aspx)打开yanzhengma1.aspx.cs页面写入如下代码:using System;using System.Collections;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Xml.Linq;using System.Drawing;public partial class yanzhengma : System.Web.UI.Page{// private System.IO.MemoryStream ms = new System.IO.MemoryStream();protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){yanzhengma yzm = new yanzhengma();Session["code1"] = yzm.CreateImage(5, ValidType.Numeric);}}/// <summary>/// 验证码的类型/// </summary>public enum ValidType{/// <summary>/// 只有数字/// </summary>Numeric,/// <summary>/// 数字和英文字符/// </summary>NumericAndEnglishChar,/// <summary>/// 中文字符/// </summary>ChineseChar}/// <summary>/// 生成一个随机文字图片,保存在 Session["code1"]/// </summary>/// <param name="count">图片中字的个数</param>/// <returns>生成的文字</returns>public string CreateImage(int count, ValidType type){string ValidCode = GenCode(count, type);switch (type){case ValidType.Numeric:CreateCheckCodeImage(ValidCode, 13.5);break;case ValidType.NumericAndEnglishChar:CreateCheckCodeImage(ValidCode, 14);break;case ValidType.ChineseChar:CreateCheckCodeImage(ValidCode, 22.5);break;default:break;}return ValidCode;}/// <summary>/// 产生随机字符串/// </summary>/// <param name="num">随机出几个字符</param>/// <returns>随机出的字符串</returns>private string GenCode(int num, ValidType type){string str;switch (type){case ValidType.Numeric:str = "0123456789";break;case ValidType.NumericAndEnglishChar:str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";break;case ValidType.ChineseChar://常用498个汉字str = "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严";break;default:str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";break;}char[] chastr = str.ToCharArray();string code = "";Random rd = new Random();int i;for (i = 0; i < num; i++){code += str.Substring(rd.Next(0, str.Length), 1);}return code;}/// <summary>/// 生成图片(增加背景噪音线、前景噪音点)/// </summary>/// <param name="checkCode">随机出字符串</param>private void CreateCheckCodeImage(string checkCode, double codeWidth){if (checkCode.Trim() == "" || checkCode == null)return;System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)(checkCode.Length * codeWidth), 22);//string path = Server.MapPath("~/images/1.jpg");//System.Drawing.Image image = System.Drawing.Image.FromFile(path);//System.Drawing.Bitmap image = new System.Drawing.Bitmap(path);Graphics g = Graphics.FromImage(image);try{//生成随机生成器Random random = new Random();//清空图片背景色g.Clear(Color.White);// 画图片的背景噪音线int i;for (i = 0; i < 25; i++){int x1 = random.Next(image.Width);int x2 = random.Next(image.Width);int y1 = random.Next(image.Height);int y2 = random.Next(image.Height);g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);}Font font = new System.Drawing.Font("Verdana", 12, (System.Drawing.FontStyle.Bold));System.Drawing.Drawing2D.LinearGradientBrush brush = newSystem.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true);//System.Drawing.SolidBrush brush = new System.Drawing.SolidBrush( Color.Blue);g.DrawString(checkCode, font, brush, 2, 2, new System.Drawing.StringFormat());//画图片的前景噪音点g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);System.IO.MemoryStream ms = new System.IO.MemoryStream();image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);HttpContext.Current.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);//清除该页输出缓存,设置该页无缓存//Response.Buffer = true;//Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);//Response.Expires = 0;//Response.CacheControl = "no-cache";//Response.AppendHeader("Pragma", "No-Cache");HttpContext.Current.Response.ClearContent();HttpContext.Current.Response.ContentType = "image/JPEG";HttpContext.Current.Response.BinaryWrite(ms.ToArray());g.Dispose();image.Dispose();}catch{g.Dispose();image.Dispose();}}}在要插入验证码的地方插入如下代码:(也可以用 <img>控件,只要是图片控件都行)<asp:ImageButton ID="ImageButton7" runat="server" Height="40px" Width="150px" onclick="ImageButton7_Click1" /><span>点击图片更换图片</span><br /><asp:Label ID="Label1" runat="server" ForeColor="Red" Text = " "> </asp:Label>比如这是登录页面,当页面加载的时候就需要用到验证码,故在代码的page_load() 中插入代码:this.ImageButton7.ImageUrl = "yanzhengma1.aspx"; 这样当页面加载的时候就会出现验证码了。
获取验证码效果和后台代码(js+html+cs)

获取验证码效果和后台代码(js+html+cs)客户端js+html代码<script type="text/javascript">var tcode = 0;//定时器返回代码 //获得验证码function GetVerifyCodeAction() {var email = $("#email").val();if (!checkEmail(email)) {$("#area_error").addClass("log-tips").show().text(EmailFormatIsFault);//邮箱格式错误}else {$.ajax({type: "post",async: false,url: "/Handler/SendMsgToMail.ashx",data: { op: 12, email: email },success: function (result) {var data = parseInt(result);switch (data) {case 1:$("#area_error").addClass("log-tips").show().text(CheckVerifyCode);//验证码已发送,请注意查收$("#btnSendCode").removeAttr("onclick");//移除发送验证码的click事件tcode = setInterval("ReSend()", 1000);//设置定时器,60秒后容许再次发送break;case -1:$("#area_error").addClass("log-tips").show().text(FillEmail);//请输⼊邮箱break;case -2:$("#area_error").addClass("log-tips").show().text(MailNotReg);//邮箱尚未注册break;case -3:$("#area_error").addClass("log-tips").show().text(OperateException);//操作异常break;case -4:$("#area_error").addClass("log-tips").show().text(OperateException);//操作异常break;case -5:$("#area_error").addClass("log-tips").show().text(OnceMinute);//每分钟只能发送⼀次break;default:$("#area_error").addClass("log-tips").show().text(OperateException);//操作异常break;}}});}return false;} //点击进⼊下⼀步function GoNext() {$("#area_error").removeClass("log-tips").text("").hide();var email = $("#email").val();if (!checkEmail(email)) {$("#area_error").addClass("log-tips").show().text(EmailFormatIsFault);//邮箱格式不正确return false;}var vcode = $("#verify").val();if (vcode == "") {$("#area_error").addClass("log-tips").show().text(FillVerifyCode);//请输⼊验证码return false;} //判断验证码是否正确$.ajax({type: "post",url: "/Handler/Members.ashx",data: { op: 14, email: email, vcode: vcode },success: function (result) {if (result == "-1") {$("#area_error").addClass("log-tips").show().text(VCodeIsNotAvailable);//验证码已失效}if (result == "1") {window.location = "forgot_password.aspx?email=" + email + "&vcode=" + vcode;}}});} //定时器function ReSend() { var Wait60Second="60秒后重发";var TotalCount = $("#hf_timecount").val();TotalCount = TotalCount - 1;$("#hf_timecount").val(TotalCount);if (TotalCount == 0) {ReSetSendMail();}else {$("#btnSendCode").text(Wait60Second.replace("60", TotalCount));}} //重新附加发送邮箱事件function ReSetSendMail() {clearInterval(tcode);$("#hf_timecount").val("60");$("#btnSendCode").text("获取验证码");$("#btnSendCode").attr("onclick", "GetVerifyCodeAction()");}</script><input id="hf_timecount" value="60" type="hidden" /><input type="text" name="email" id="email" /><button type="button" id="btnSendCode" onclick="GetVerifyCodeAction()">获取验证码</button> <input type="text" name="verify" id="verify" /><input type="button" id="btn_next" value="下⼀步" onclick="GoNext()"/>服务端代码:/// <summary>/// 发送邮件/// </summary>/// <param name="context"></param>/// <returns></returns>public string SendMail(HttpContext context){try{if (!string.IsNullOrEmpty(CookiesHelper.getCookie("send_mail_limit"))){return "-5";//每分钟只能发送⼀次}string email = context.Request["email"];if (string.IsNullOrEmpty(email) || !CommonHelper.IsValidEmail(email)){return "-1";//传值为空}//判断邮件是否存在BLL.Web.Member bllMember = new BLL.Web.Member();int mailCount = bllMember.GetCountByEmail(email);Models.Web.Member member = bllMember.GetModelByEmail(email);if (mailCount == 0 || member == null){return "-2";//不存在}string vcode = CommonHelper.RandCode(8);Models.Web.VerifyCode model = new Models.Web.VerifyCode();model.v_code = vcode;model.v_createdate = DateTime.Now;model.v_enddate = DateTime.Now.AddHours(2);model.v_status = 0;model.v_email = email;BLL.Web.VerifyCode bllVC = new BLL.Web.VerifyCode();int no = bllVC.Append(model);if (no > 0){string sendText = "";string tempPath = context.Server.MapPath("~/EmailTemp/ModifyPwd.txt");using (StreamReader sr = new StreamReader(tempPath)){sendText = sr.ReadToEnd();}sendText = sendText.Replace("{UserName_CH}", member.PersnalName);sendText = sendText.Replace("{UserName_EN}", member.PersnalName);sendText = sendText.Replace("{VCode}", vcode);CommonHelper.SendEmail(email, sendText, ng.RetrievePassword); CookiesHelper.setCookie("send_mail_limit", "SendMail", 1.00);}else{return "-3";//验证码⽣成异常,请重试! }return "1";//成功}catch (Exception){return "-4";//异常}}。
JS实现验证码

import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.IOException;import java.io.OutputStream;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;public class ImgServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// 1:声明图片大小int width = 60;int height = 25;// 2:生成内存中的图片BufferedImage img = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 3:获取画笔Graphics g = img.getGraphics();g.setColor(new Color(226, 239, 247));// 4:画背景g.fillRect(0, 0, width, height);// 5:设置字体、大小g.setFont(new Font("宋体", Font.BOLD, 18));// 6:生成四个数String sCode = "";Random r = new Random();for (int i = 0; i < 4; i++) {int a = r.nextInt(10);// 写出这个数Color c = new Color(r.nextInt(256), r.nextInt(256),r.nextInt(256));g.setColor(c);g.drawString("" + a, i * 15, 24);sCode += a;}// 放到session中request.getSession().setAttribute("scode", sCode);// 7:生效g.dispose(); // 相当于flush()// 8:输出图片response.setContentType("image/jpeg");// 设置输出的类型OutputStream out = response.getOutputStream();// 输出ImageIO.write(img, "JPEG", out);}}public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {// 5:一次性设置所有获取到的参数都是UTF-8request.setCharacterEncoding("UTF-8");// 3:设置输出的编码格式和类型response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();// 1:获取用户提交的参数的值String code = request.getParameter("code");// 从session中获取验证码String sCode = (String) request.getSession().getAttribute("scode");// 判断验证码是否正确if (!code.equals(sCode)) {out.print("你的验证码错误。
验证码邮箱检验jsp代码

var authenNum = $("#tbAuthenCode").val();
var authenId = $("#span_comment_test").html();
$("#lnkRereshAuthenCode").html("<span style='color:red'>刷新中...</span>");
return false;
}
function RefreshImg(response){
$("#imgAuthenCode").attr("src","/Modules/CaptchaImage/ValidCodeImage.aspx?id="+encodeURIComponent(response));
ShowCommentMsg(data.d["ReturnData"]);//"抱歉!评论提交失败!请与管理员联系。");
$("#span_comment_posted").html('');
}
// AjaxPost("/ws/CommentService.asmx/RefreshAuthenCode","{}",ShowAuthenCodeOk);
//}
$("#wrapAuthenCode").show();
}
var comment = {};
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();//当得到的值表示合法,则验证码通过。
JSP图片验证码

code.jspview plaincopy to clipboardprint?1.<%@ page language="java" pageEncoding="GBK" contentType="image/jpeg" %>2.<%@ page import= "java.awt.* , java.awt.geom.* , java.awt.image.* ,javax.imageio.*, java.awt.font.*" %>3.<%!4.//随机获取一个字母5.String randChar()6.{7.int num = (int)(Math.random()*26)+65;8.char c = (char)num;9.return String.valueOf(c);10.}11.//随机颜色12.Color randColor()13.{14.int r= (int)(Math.random()*256);15.int g= (int)(Math.random()*256);16.int b= (int)(Math.random()*256);17.return new Color(r,g,b);18.}19.//输出一个字符20.void printChar(int x , int y,char code,Graphics2D g2)21.{22.String strCode = String.valueOf(code);23.AffineTransform at = AffineTransform.getTranslateInstance(x,y);24.FontRenderContext frc = new FontRenderContext(at,true,true);25.TextLayout tl = new TextLayout(strCode,newFont("Arial",Font.BOLD+Font.ITALIC,30),frc);26.Shape sha=tl.getOutline(at);27.g2.setColor(randColor());28.g2.setStroke(new BasicStroke(3.0f));29.g2.draw(sha);30.g2.setColor(Color.white);31.g2.setStroke(new BasicStroke(0));32.g2.fill(sha);33.}34.%>35.<%36.//图像大小37.int width = 100;38.int height = 35;39.40.//验证字符41.String strCode =(int)(Math.random()*10)+randChar()+(int)(Math.random()*10)+randChar();42.43.//创建图像44.BufferedImage img = newBufferedImage(width,height,BufferedImage.TYPE_INT_RGB);45.46.Graphics g = img.getGraphics();47.Graphics2D g2 = (Graphics2D)g;48.49.//绘制背景色50.g.setColor(Color.white);51.g.fillRect(0,0,width,height);52.53.//绘制黑边54.g.setColor(Color.black);55.g.drawRect(0,0,width-1,height-1);56.57.//绘制30条干绕线58.for(int j=1;j<=30;j++)59.{60.int x1 = (int)(Math.random()*width/4);61.int x2 = (int)(Math.random()*width) + x1;62.int y1 = (int)(Math.random()*height);63.int y2 = (int)(Math.random()*height);64.g2.setColor(randColor());65.g2.setStroke(new BasicStroke(1.5f));66.g2.drawLine(x1,y1,x2,y2);67.}68.69.//绘制文本70.for(int i=0;i<strCode.length();i++)71.{72.printChar(20*i+10 , 28+(i%2==0 ? 3:-3),strCode.charAt(i),g2);73.}74.75.//写入session76.session.setAttribute("code",strCode);77.78.//输出图像79.g.dispose();80.ImageIO.write(img,"jpeg",response.getOutputStream());81.out.clear();82.out = pageContext.pushBody();83.%>使用方法:<img src="code.jsp" alt="验证码" title="点击更换图片" />因为验证码写入了session,所以使用时,只需从session中取出来进行比较即可。
JSP源代码_验证身份证号码

编号:SC010********软件技术国家教学资源库建设项目——软件开发素材之JSP源代码一、功能简介验证身份证号码。
二、创建或搜集相关信息搜集单位:湖南铁道职业技术学院搜集时间:2012-12-07来源:互联网三、适用对象学生、教师、Java及Java web项目开发人员、相关技术人员等。
四、程序代码程序名称:index.jsp<%@ page contentType="text/html; charset=gb2312" %><HTML><HEAD><TITLE>验证身份证号码</TITLE><META http-equiv=Content-Type content="text/html; charset=gb2312"><link href="css/style.css" rel="stylesheet"></HEAD><body><script language="javascript">function check(myform){if(myform.number.value==""){alert("请输入身份证号码地址!");myform.number.focus();return;}if(!checkeNO(myform.number.value)){alert("您输入的身份证号码不正确!");myform.number.focus();return;}myform.submit();}function checkeNO(NO){var str=NO;//在JavaScript中,正则表达式只能使用"/"开头和结束,不能使用双引号var Expression=/\d{17}[\d|X]|\d{15}/;var objExp=new RegExp(Expression);if(objExp.test(str)==true){return true;}else{return false;}}</script><FORM name="form1" action="" method="post"><TABLE cellSpacing=0 cellPadding=0 width=538 align=center border=0><TR><TD width="548" height=29><SPAN class=style15> 欢迎光临<Ahref="index.jsp">Go购电子商城</A>----<Ahref="#">会员注册</A>>>>> </SPAN></TD></TR><TR><TD><TABLE width="100%" height="195" border=1 align=center cellPadding=0 cellSpacing=0><TR bgColor=#efefef><TD height="25" colSpan=2 class=tablebody1><STRONG> 用户基本资料</STRONG></TD></TR><TR><TD width="20%" align="center" class=tablebody1>用 户 名:<BR></TD><TD height="24" class="tablebody1"> <INPUT class=wenbenkuang maxLength=10 size=30name=name> 注册用户名长度限制为0-10字节</TD></TR><TR><TD align="center" class=tablebody1>性 别:<BR></TD><TD height="24" class=tablebody1><INPUT type=radio CHECKED value=男name=sex>男<INPUT type=radio value=女name=sex>女 &n bsp;请选择您的性别</TD></TR><TR><TD width="20%" align="center" class=tablebody1>密 码:<BR></TD><TD height="24" class=tablebody1> <INPUT class=wenbenkuang type=passwordmaxLength=16 size=30 name=psw>请输入密码,区分大小写</TD></TR><TR><TD width="20%" align="center" class=tablebody1>确认密码:<BR></TD><TD height="24" class=tablebody1> <INPUT class="wenbenkuang" type="password"maxLength="16" size="30" name="pswc"> 请再输一遍确认</TD></TR><TR><TD align="center" class=tablebody1>Email:<BR></TD><TD height="24" class=tablebody1> <INPUT class="wenbenkuang" maxLength="50" size=30name="e_mail"> 请输入有效的邮件地址</TD></TR><TR><TDheight=21 align="center" vAlign=center class=tablebody1>身份证号码:</TD><TD class=tablebody1 align=left height=24> <input class=wenbenkuang id=number maxlength=15 size=18 name=number> <SPANclass=style11>*</SPAN> </TD></TR><TR><TD align="center" vAlign=center class=tablebody1>联系电话:</TD><TD class=tablebody1 align=left width="80%" height=24> <INPUT class=wenbenkuang maxLength=15 size=18 name=userphone></TD></TR></TABLE><BR><div align=center><INPUT class="go-wenbenkuang" type="button" value="注册" name="Submit" onClick="check(form1)">(<SPAN class=style11>*</SPAN> 为必填项目)<INPUT class=go-wenbenkuang type=reset value="重置" name=Submit2></div></TD></TR></TABLE></FORM></body></html>五、运行结果图1 运行结果图2 运行结果。
jsp登录验证代码

package database;
importjava.sql.*;
public classsqlbean{
public Stringquery_statement;
publicResultSetresult=null;
public Connectionconn;
Randomrandom= new Random();
if(fc>255)fc=255;
if(bc>255)bc=255;
intr=fc+random.nextInt(bc-fc);
intg=fc+random.nextInt(bc-fc);
intb=fc+random.nextInt(bc-fc);
</TD>
</TR>
<tr>
<td height="54" align="center">认证码:</td>
<td width="181" height=54>
<input type=text name=randmaxlength=4 value="" size=6>
<imgborder=1src="image.jsp">
%>
login.jsp用于进入登陆界面:
<%@ pagecontentType="text/html;charset=gb2312" language="java"errorPage="" %>
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在上一篇内容中介绍了有关JSP中产生数字验证码图片的过程,本文将继续介绍有关JSP中的另一种验证码的实现,即中文验证码在JSP中的实现,使用中文验证码的好处是能提高验证的有效性,提高验证的安全度,因为中文相对于英文或数字笔画结构相对比较复杂,从而增加了分析程序解析验证码图片并读取验证信息的难度。
在文中并分析中文验证的实现过程。
二、JSP中实现中文验证码源码如下:
ChineseVal.jsp
<%@page pageEncoding="gb2312" contentType="image/jpeg" import="java x.imageio.*,java.util.*,java.awt.image.*,java.awt.*"%>
<%!
//在此处获取并生成随机颜色
Color getRandColor(Random random, int ff, int cc) {
if(ff > 255)
ff = 255;
if(cc > 255)
cc = 255;
int r = ff + random.nextInt(cc - ff);
int g = ff + random.nextInt(cc - ff);
int b = ff + random.nextInt(cc - ff);
return new Color(r, g, b);
}%>
<%
//在此处设置JSP页面无缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 设置图片的长宽
int width = 130;
int height = 30;
//设定被随机选取的中文字,此处中文字内容过多,不一一列出,只是举例说明下。
String base = "¥u9752¥u534a¥u706b¥u6cd5¥u9898¥u5efa¥u8d76¥u4f4d¥u55 31¥u6d77¥u4e03¥u5973¥u4efb¥u4ef6¥u611f¥u51c6¥u97f3¥u7b54¥u54e5¥u9645¥u 65e7¥u795e¥u5ea7¥u7ae0¥u538b¥u6162¥u53d4¥u80cc¥u7ec6...省略文字。
";
//设置备选随机汉字的个数
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, 188, 235));
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, 180, 199));
g.setFont(new Font("Times New Roman", Font.PLAIN, 14));
for(int i = 0; i < 4; i++) {
g.drawString("@*@*@*@*@*@*@*",
0, 5 * (i + 2));
}
//取随机产生的验证码(4个汉字)
//保存生成的汉字字符串
String sRand = "";
for(int i = 0; i < 4; 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);
}
//将验证码存入S ession中
session.setAttribute("rand", sRand);
g.dispose();
//将图象输出到JSP页面中
ImageIO.write(image, "JPEG", response.getOutputStream());
//关闭流
out.clear();
out=pageContext.pushBody();
%>
以上就是JSP中产生中文验证码过程的源码分析,由中文作为验证码存在于JSP页面中,将会存在JSP中文乱码的现象,接下来文章将介绍如何调用JSP验证码和使用的方法,以及如何解决JSP中文验证码乱码问题和其他JAVA验证码的实现。
下文将介绍有关JSP中文验证码的乱码问题解决方法以及JSP中调用以上两种验证码的方法。