JSP实现验证码功能

    生成有4个随机数字和杂乱背景的图片,数字和背景颜色会改变,服务器端刷新(用history.go(-1)也会变)

    原型参考ALIBABA http://china.alibaba.com/member/showimage 产生验证码图片的文件image.jsp

<%@ page contentType="image/jpeg" import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*" %>
<%!
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=60, height=20;
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));

//画边框
//g.setColor(new Color());
//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 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,16);
}

// 将认证码存入SESSION
session.setAttribute("rand",sRand);

// 图象生效
g.dispose();

// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
%>


使用验证码图片的文件a.jsp

<%@ page contentType="text/html;charset=gb2312" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>认证码输入页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<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="image.jsp"></td>
</tr>
<tr>
<td align=left>输入上面的认证码:</td>
<td><input type=text name=rand maxlength=4 value=""></td>
</tr>
<tr>
<td colspan=2 align=center><input type=submit value="提交检测"></td>
</tr>
</form>
</body>
</html>


验证的页面check.jsp

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<html>
<head>
<title>认证码验证页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<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>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JSP编程技巧集锦<br><br>需要者请联系:e_mail:[email protected] QQ:595563946<br><br>目 录<br><br>1. JSP编程中常用的js技术<br>2. 在下拉列表框里选择一个值后跳出新窗口?<br>3. 在JSP中启动execl?<br>4. 两级下拉列表框联动菜单?<br>5. java中如何把一个目录下的文件移到另一个指定的目录?<br>6. 制作表格线?<br>7. jsp如判别一个字符在A到Z之间?<br>8. 得到一浮点数小数点后4位,如何写以函数截取为两位<br>9. 整型转字符?<br>10. 显示数据库的记录,点击哪个标题栏,就按照哪个标题排序<br>11. 制作两个按钮<br>12. 用什么sql语句将数据库中的一条记录,复制为两条?<br>13. 有兩個按鈕A,B,其中A按下去,A就不可以再按,另外B按下去,A可以再按<br> 請問如何用javascript控制.?<br>14. jsp中的数据库的连接方式<br>15. 在jsp中,怎么实现按回车就可提交表单?<br>16. 在JSP中如何传递数组?<br>17. 按地址取图片?<br>18. JSP中如何上传图片到数据库字段?<br>19. 页面自动刷新?<br>20. 表单自动提交?<br>21. 从JSP传数据的到JAVABEAN里?<br>22. weblogic 数据池连接? 数据源 JNDI名字 mysource<br>23. 三级下拉列表框联动菜单?<br>24. 在JSP中如何调用浏览器中的"另存为"功能?<br>25. 网页全屏显示<br>26. 求两个日期相隔了多少天:输入时间格式为(yyyy-mm-dd)<br>27. 上传文件对话框<br>28. 分页测试<br>29. 下载文件<br>30. 简单汉字判断<br>31. 将JSP的变量或者bean传递给JAVASCRIPT使用?<br>32. 把一种格式(如yyyy-mm-dd)的日期变量转换成另外一种格式(如dd-mm-yyyy)的日期变量!<br>33. 实现在页面上添加一行输入对话框<br>34. 制作验证码图片?<br>35. 图片缩小放大功能<br>36. 点击输入框弹出日期选择?<br>37. 在图片上传前查看自己要上传的图片?<br>38. 在图片排列的页面上选中一个图片,然后把它删掉?<br>39. 显示某目录下的所有文件<br>40. 把复选框中选中的值直接显示在输入文本框中?<br>41. 选择路径下的文件直接显示文件内容?<br>42. 制作进度条?<br>43. 对较长字符省略显示?<br>44. 制作日历?<br>45. 点击文本弹出一个选择框,选中值后返回并显示<br>46. 关闭框架页面回到没框架的页面?<br>47. 选中多条记录一次性删除?<br>48. 自动获取页面文件名?<br>49. 在JSP中调用ActiveX控件?<br>50. 使用SmartUpload实现文件上传?<br>51. 使用iReport和Jasperreport开发报表?<br>52. 使用iText生成PDF?<br>53. 制作图片水印?<br>54. 在页面中屏蔽键盘功能键?<br>55. 禁止用户复制网页内容?<br>56. 实现不在地址拦中显示当前URL?<br>57. 获取用户的真实IP地址?<br>58. 获取用户浏览器信息?<br>59. 获取当前绝对路径?<br>60. 将HTML文件转换成XML文件?<br>61. 结合XML和XSL输出HTML页面?<br>62. 制作动态树型菜单制作?<br>63. 制作类似QQ的短消息提示?<br>64. 用jfreechat制作拄、饼、曲线图型?<br>65. 文本框怎么只容许输入数字?<br>66. 打开Word和Execl文件?<br>67. 生成Word 和 Excel文档?<br>68. JSP如何读取Word内容?<br>69. 浏览服务器目录/文件?<br>70. jsp直接弹出下载框下载文件?<br>71. 配置数据连接池和数据源(Tomcat)?<br>72. 点击图1变为图2?<br>73. JSP中显示图片的方法之一?<br>74. int转为Integer的方法?<br>75. 请求jsp页面禁止缓存方法?<br>76. select选中其中的值自动到一个文本框?<br>77. JSP连接数据库?<br>78. JSP两级下拉列表框联动(数据库)?<br>79. JSP字符编码问题及转换大全?<br>80. 使用过滤器设置请求编码?<br>81. JSP或Servlet调用DLL?<br>82. 在JSP中包含Applet(时钟)?<br>83. 在Applet中显示一个html页面?<br>84. 使session强制失效85. iFreme编辑框使用?<br>86. Applet与Servlet的通讯?<br>87. JSP表格直接导入EXCEL?<br>88. 访问类路径上的资源?<br>89. 操作文件目录?<br>90. 获取文件的属性?<br>91.如何开发并部署一个servlet<br>92.如何取得配置文件中的servlet的参数<br>93.使servlet成为线程安全的<br>94.访问标准的CGI变量<br>95. servlet之间及与jsp间的通讯<br>96.获取当前绝对路径<br>97.在servlet中操作cookie<br>98.使用servlet生成JPEG图象<br>99.在servlet中根据请求参数自动填充java对象<br>100.将jsp应用程序打war包<br>101.实现投票系统<br>102.使用cookie记录用户访问次数?<br>103.使用session对象防止表单重复提交?<br>104.获取用户真实IP地址?<br>105.获取请求中的所有参数?<br>106.获取完整的请求URL?<br>107.在重新显示表单时保留用户已经输入的合法数据?<br>108.使用选代器遍历集合<br>109.使用特定字符串对一个字符串进行分割?<br>110.格式化输出数字和字符?<br>111.生成一定范围的随机数?<br>112.调用其它应用程序?<br>113.禁止列出站点文件目录?<br>114.防止用户直接输入文件名访问JSP?<br>115.防止表单重复提交?<br>116.使页面全屏显示?<br>117.在页面中屏蔽鼠标右键?<br>118.在页面中禁止键盘功能键?<br>119.实现不在地址栏显示当前URL?<br>120.用javabean方式读取文本文件制作统计图?<br>121.上传图片并生成缩略图?<br>122.JS实现图形菜单中点击当前图片变另一幅图片?<br>123.无刷新页面自动刷新?<br>124.写文件?<br>125.怎么得到鼠标点击在线图片的位置坐标?<br>126.页面单线程?<br>127.数字转中文<br>128 自动计算金额<br>129 JSP页面打印中使用WebBrowser控件<br>130 <select...>不刷新页面添加新的类别<br>131 鼠标滚动缩放图片<br>132 根据输入的表名生成输入数据表格<br>133 JSP表格输出到Excel<br>134.JSP页面输出到带格式的Word文档中<br>135.JSP调用Word打印页面<br>136.年月日联动选择<br>137.日期差计算方法<br>138.文本拷贝<br>139.字符串转日期<br>140.计算今天距月底还有几天

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值