jsp验证码代码

作者:简简单单 2010-08-26

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 , ;
    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());


    %>

jsp汉字验证码的实现代码

<%@pagecontenttype="image/jpeg"import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*
"%>
  
<%!
//createbysmallnest
//email:smallnest@gmail.com
//website:www.kuaff.com
//生成随机颜色
colorgetrandcolor(randomrandom,intfc,intbc)...{
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);
returnnewcolor(r,g,b);
}
%>
  
<%
//设置页面不缓存
response.setheader("pragma","no-cache");
response.setheader("cache-control","no-cache");
response.setdateheader("expires",0);
//设置图片的长宽
int,;
//设置备选汉字,剔除一些不雅的汉字
stringbase="的一了是我不在人们有来他这上着个地到大里说就去子得也和那要下看天时过出小么起你都把好
还多没为又可家学只以主会样年想生同老中十从自面前头道它后然走很像见两用她国动进成回什边作对开而己
些现山民候经发工向事命给长水几义三声于高手知理眼志点心战二问但身方实吃做叫当住听革打呢真全才四已
所敌之最光产情路分总条白话东席次亲如被花口放儿常气五第使写军吧文运再果怎定许快明行因别飞外树物活
部门无往船望新带队先力完却站代员机更九您每风级跟笑啊孩万少直意夜比阶连车重便斗马哪化太指变社似士
者干石满日决百原拿群究各六本思解立河村八难早论吗根共让相研今其书坐接应关信觉步反处记将千找争领或
师结块跑谁草越字加脚紧爱等习阵怕月青半火法题建赶位唱海七女任件感准张团屋离色脸片科倒睛利世刚且由
送切星导晚表够整认响雪流未场该并底深刻平伟忙提确近亮轻讲农古黑告界拉名呀土清阳照办史改历转画造嘴
此治北必服雨穿内识验传业菜爬睡兴形量咱观苦体众通冲合破友度术饭公旁房极南枪读沙岁线野坚空收算至政
城劳落钱特围弟胜教热展包歌类渐强数乡呼性音答哥际旧神座章帮啦受系令跳非何牛取入岸敢掉忽种装顶急林
停息句区衣般报叶压慢叔背细"; [page]
//备选汉字的长度
intlength=base.length();
//创建内存图像
bufferedimageimage=newbufferedimage(width,height,bufferedimage.type_int_rgb);
//获取图形上下文
graphicsg=image.getgraphics();
//创建随机类的实例
randomrandom=newrandom();
//设定图像背景色(因为是做背景,所以偏淡)
g.setcolor(getrandcolor(random,200,250));
g.fillrect(0,0,width,height);
//备选字体
string[]fonttypes=...{
"宋体","新宋体","黑体","楷体","隶书"};
intfonttypeslength=fonttypes.length;
//在图片背景上增加噪点
g.setcolor(getrandcolor(random,160,200));
g.setfont(newfont("timesnewroman",font.plain,14));
for(inti=0;i<6;i++)...{
g.drawstring("*********************************************",0,5*(i+2));
}
//取随机产生的认证码(6个汉字)
//保存生成的汉字字符串
stringsrand="";
for(inti=0;i<6;i++)...{
intstart=random.nextint(length);
stringrand=base.substring(start,start+1);
srand+=rand;
//设置字体的颜色
g.setcolor(getrandcolor(random,10,150));
//设置字体
g.setfont(newfont(fonttypes[random.nextint(fonttypeslength)],font.bold,18+random.nextint(6)));

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

很多新手对图片验证码不是很了解,今天我们就来看看一个实例吧,首先,先写一个动态图片生成的servlet类,如下:

package org.yuanliang;

import java.awt.color;
import java.awt.font;
import java.awt.graphics;
import java.awt.image.bufferedimage;
import java.io.bytearrayoutputstream;
import java.io.ioexception;
import java.util.random;

import javax.imageio.imageio;
import javax.servlet.servletexception;
import javax.servlet.servletoutputstream;
import javax.servlet.http.https教程ervlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import javax.servlet.http.httpsession;

public class randomcode extends httpservlet {
private static final long serialversionuid = 1l;

private static int ;//设置图片的宽度

private static int ;//设置图片的高度

public void doget(httpservletrequest request, httpservletresponse response)
throws servletexception, ioexception {
httpsession session = request.getsession();
response.setcontenttype("image/jpeg");
servletoutputstream sos = response.getoutputstream();

response.setheader("pragma", "no-cache");
response.setheader("cache-control", "no-cache");
response.setdateheader("expires", 0);

bufferedimage image = new bufferedimage(width, height,
bufferedimage.type_int_rgb);
graphics g = image.getgraphics();

char[] rands = generatecheckcode();
drawbackground(g);
drawrands(g, rands);
g.dispose();

bytearrayoutputstream bos = new bytearrayoutputstream();
imageio.write(image, "jpeg", bos);
byte[] buf = bos.tobytearray();
response.setcontentlength(buf.length);
sos.write(buf);
bos.close();
sos.close();
session.setattribute("randomcode", new string(rands));
}

private void drawbackground(graphics g) {
g.setcolor(new color(0xdcdcdc));
g.fillrect(0, 0, width, height);
for (int i = 0; i < 120; i++) {
int x = (int) (math.random() * width);
int y = (int) (math.random() * height);
int red = (int) (math.random() * 255);
int green = (int) (math.random() * 255);
int blue = (int) (math.random() * 255);
g.setcolor(new color(red, green, blue));
g.drawoval(x, y, 1, 0);[page]
}
}

private void drawrands(graphics g, char[] rands) {
// g.setcolor(color.blue);
random random = new random();
int red = random.nextint(110);
int green = random.nextint(50);
int blue = random.nextint(50);
g.setcolor(new color(red, green, blue));
g.setfont(new font(null, font.italic | font.bold, 18));
g.drawstring("" + rands[0], 1, 17);
g.drawstring("" + rands[1], 16, 15);
g.drawstring("" + rands[2], 31, 18);
g.drawstring("" + rands[3], 46, 16);
}

private char[] generatecheckcode() {
string chars = "0123456789abcdefghijklmnopqrstuvwxyz";
char[] rands = new char[4];
for (int i = 0; i < 4; i++) {
int rand = (int) (math.random() * 36);
rands[i] = chars.charat(rand);
}
return rands;
}

public void dopost(httpservletrequest request, httpservletresponse response)
throws servletexception, ioexception {
this.doget(request, response);
}
}

ok!!!保存为randomcode.java吧,然后进行编译,生成randomcode.class文件,放到web-inf/classes/org/yuanliang目录下;

然后在web-inf目录下建立web.xml,添加servlet配置:

jsp验证码生成以及刷新

关于jsp验证码生成,显示,验证和刷新:

1:四位数据的验证图片生成,用servlet实现

2: 在web.xmlli配置servlet

3:页面上显示servlet生成的图片

4: 关于验证码输入数据的验证

5: 验证码的刷新

 

——————————————————————–

1:四位数据的验证图片生成,用servlet实现,servlet代码如下:
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.util.*;

import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;

public class vimage extends httpservlet {
public void init(servletconfig conf) throws servletexception {
super.init(conf);
}

public void doget(httpservletrequest req, httpservletresponse res) throws servletexception, ioexception {
res.setcontenttype("image/jpeg");
res.setheader("pragma", "no-cache");
res.setheader("cache-control", "no-cache");
res.setdateheader("expires", 0);
httpsession session = req.getsession();

// 在内存中创建图象
int , ;
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 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);
}
}

2: 在web.xmlli配置servlet:

vimage
/vimage


再来看个实例

<%@ page contenttype="image/jpeg" import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*" %>
<%
// 在内存中创建图象
int , ;
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 =""+ (math.random()*10000);
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());
//在页面上调用 

%>


login.jsp


程序代码 ==================================================
<%@ page contenttype="text/html;charset=gb2312" %>



认证码输入页面






















check.jsp


程序代码 ==================================================
<%@ page contenttype="text/html; charset=gb2312" language="java" import="java.sql.*" errorpage="" %>


认证码验证页面





<%
string rand = (string)session.getattribute("rand");
string input = request.getparameter("rand");
%>
系统产生的认证码为: <%= rand %>

您输入的认证码为: <%= input %>



<%
if (rand.equals(input)) {
%>
输入相同,认证成功!
<%
} else {
%>
输入不同,认证失败!
<%
}
%>

相关文章

精彩推荐

一聚教程网

Copyright © 2010-2024

111com.net All Rights Reserved

系统产生的认证码:
输入上面的认证码: