jsp验证码怎么生成,文字图形验证码
% @页content type= image/JPEG import= Java . awt . *,java.awt.image.*,java.util.*,javax . image io . * " %
%!
//由smallnest创建
//电子邮件:smallnest@gmail.com
//网址:www.kuaff.com
//生成随机颜色
Color getRandColor(Random random,int fc,int bc) {
if(fc 255)fc=255;
if(公元前255年)bc=255
int r=fc random . nextint(BC-fc);
int g=fc random . nextint(BC-fc);
int b=fc random . nextint(BC-fc);
返回新颜色(r,g,b);
}
%
%
//设置页面不缓存
response.setHeader(Pragma , No-cache );
response . set header(“Cache-Control”、“no-Cache”);
response . set date header( Expires ,0);
//设置图片的长宽
int width=176,height=30
//设置备选汉字,剔除一些不雅的汉字
string base= \ u 7684 \ u4e 00 \ u4e 86 \ u662f \ u 6211 \ u4e0d \ u 5728 \ u4e ba \ u4eec \ u 6709 \ u 6765 \ u4ed 6 \ u8fd 9 \ u4e0a \ u 7740 \ u4e2a \ u 5730 \ u 5230 \ u 5927 \ u91cc \ u8bf 4 \ u5c 31 \ u
//备选汉字的长度
int length=base.length()。
//创建内存图像
BufferedImage image=new BufferedImage(宽度,高度,BufferedImage。TYPE _ INT _ RGB);
//获取图形上下文
graphics g=image . get graphics();
//创建随机类的实例
Random Random=new Random();
//设定图像背景色(因为是做背景,所以偏淡)
g.setColor(getRandColor(random,200,250));
g.fillRect(0,0,width,height);
//备选字体
String[] fontTypes={
\u5b8b\u4f53 , \u65b0\u5b8b\u4f53 , \u9ed1\u4f53 , \ u96b 6 \ u4e 66 };
int字体类型长度=字体类型。长度;
//在图片背景上增加噪点
g.setColor(getRandColor(random,160,200));
g.setFont(新字体(‘泰晤士新罗马’,字体。平原,14));
for(int I=0;i i ) {
g。拉带( * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ,0,5 *(I ^ 2));
}
//取随机产生的认证码(6个汉字)
//保存生成的汉字字符串
string sRand=
for(int I=0;i i ) {
int start=随机。nextint(长度);
string rand=base。子串(start,start 1);
sRand=rand
//设置字体的颜色
g.setColor(getRandColor(random,10,150));
//设置字体
g.setFont(新字体(字体类型【随机。nextint(fontTypesLength)],Font .加粗,18随机。nextint(6)));
//将此汉字画到图片上
g.drawString(rand,24 * i 10 random.nextInt(8),24);
}
//将认证码存入会议
session.setAttribute(rand ,sRand);
g。dispose();
//输出图象到页面
ImageIO.write(image, JPEG ,response。获取输出流());
%
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。