彩色的验证码

整个image.jsp页面代码:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>  
    <base href="<%=basePath%>">  
    <title>image page</title>  
    <meta http-equiv="pragma" content="no-cache">  
    <meta http-equiv="cache-control" content="no-cache">  
    <meta http-equiv="expires" content="0">     
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    <meta http-equiv="description" content="This is my page">  
  </head>  
   
  <body>  
        <%@ page contentType="image/jpeg" import="java.awt.*,  
        java.awt.image.*,java.util.*,javax.imageio.*,java.io.OutputStream" %>  
        <%!  
        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="";  
        String randString = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  
        for (int i=0;i<4;i++){  
            //String rand=String.valueOf(random.nextInt(10));  
            String rand = String.valueOf(randString.charAt(random.nextInt(61)));  
            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();  
         
        // 输出图象到页面  
        OutputStream output=response.getOutputStream();  
        ImageIO.write(image, "JPEG", output);  
        output.flush();  
        out.clear();  
        out = pageContext.pushBody();  
        %>  
  </body>  
</html>  

login.jsp

验证码的调用:

<div>  
     验证码:<input type="text" name="randCode" maxlength="4" value="" size="4">  
     <span><img id="imgCode" border="0" src="../image.jsp" style="cursor:pointer;" onclick="changeImg()"/></span>  
     <span><a href="javascript:void(0)" onclick="changeImg()">看不清,换一张</a></span>  
</div>  

看不清,换一张 的JS代码

<script type="text/javascript" language="javascript">  
function changeImg(){  
    var img =document.getElementById("imgCode");  
    img.src=img.src+"?";  
}  
  
</script>  

后台验证代码片段:

//进行验证码检验  
String image=userForm.getImage();  
//得到session中的验证码  
String rand=(String)httpSession.getAttribute("rand");  
if(rand.equals(image)){  
  //正确  
}  
else{  
   //不正确  
}  

前台实现的效果演示图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值