惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
罗磊的独立博客
腾讯CDC
云风的 BLOG
云风的 BLOG
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
U
Unit 42
I
InfoQ
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
美团技术团队
IT之家
IT之家
Stack Overflow Blog
Stack Overflow Blog
F
Fortinet All Blogs
GbyAI
GbyAI
S
SegmentFault 最新的问题

博客园 - 李韦利

解读C#中的规则表达式 Oracle函数大全 作一个真正合格程序员的七种素质 面试官最爱提的问题TOP10 一名董事长给大学生的18条忠告 程序人生:做技术,切不可沉湎于技术 开始上班了 连接MySQl的JavaBean - 李韦利 - 博客园 Jakarta-Tomcat简明中文版用户指南 SQL 语法参考 Mysql与JSP网页中文乱码问题的解决方案 MD5加密算法简介 jsp实现cookie的使用 Java语言入门级的十二大特色详细介绍 JAVABEAN实现多文件上传的两种方法 J2EE架构学习者的6个最佳实践 html与jsp开发分离技术 安装程序制作简明教程 Unix/Linux命令详解
JSP生成验证码源程序
李韦利 · 2006-03-07 · via 博客园 - 李韦利

<%@ page contentType="image/jpeg" import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*" %>
<%
//
在内存中创建图象
int width=60, height=20;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);

//

获取图形上下文
Graphics g = image.getGraphics();

//

设定背景色
g.setColor(new Color(0xDCDCDC));
g.fillRect(0, 0, width, height);

//

画边框
g.setColor(Color.black);
g.drawRect(0,0,width-1,height-1);

//

取随机产生的认证码(4位数字)
String rand = request.getParameter("rand");
rand = rand.substring(0,rand.indexOf("."));
switch(rand.length())
{
case 1: rand = "000"+rand; break;
case 2: rand = "00"+rand; break;
case 3: rand = "0"+rand; break;
default: rand = rand.substring(0,4); break;
}

//

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

//

将认证码显示到图象中
g.setColor(Color.black);
Integer tempNumber = new Integer(rand);
String numberStr = tempNumber.toString();

g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));
String Str = numberStr.substring(0,1);
g.drawString(Str,8,17);

Str = numberStr.substring(1,2);
g.drawString(Str,20,15);
Str = numberStr.substring(2,3);
g.drawString(Str,35,18);

Str = numberStr.substring(3,4);
g.drawString(Str,45,15);

//

随机产生88个干扰点,使图象中的认证码不易被其它程序探测到
Random random = new Random();
for (int i=0;i<20;i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
g.drawOval(x,y,0,0);
}

//

图象生效
g.dispose();

//

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