纯数字验证码

登录时常常要用到验证码验证,下面是一个简单的纯数字验证码,详细代码见image.jsp,将每次生成的验证码文本直接存入session中,登录时方便后台从session中取值验证:

<%@ page contentType="image/jpeg"
    import="java.awt.*,
java.awt.image.*,java.util.*,javax.imageio.*"
    pageEncoding="utf-8"%>
<%!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);
    }%>
<%
    out.clear();//这句针对resin服务器,如果是tomacat可以不要这句
    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(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);
    }
    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("sRand", sRand);
    g.dispose();
    ImageIO.write(image, "JPEG", response.getOutputStream());
%>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Angular&服务

Angular2 组件的使用

3.在 @Component 中 ,设置selector、template 和 styles 等元数据

1133
来自专栏Hongten

oracle系列--第六篇 Oracle上面小试牛刀

现在我们可以在oracle上面进行创建表,向表中插入数据,修改表中数据,删除数据,甚至删除表等一系列操作。

743
来自专栏前端架构

详解location与history属性,replace,assign,

每次修改location的属性(hash除外),页面都会以新URL重新加载。 当通过上述任何一种方式修改URL之后,

751
来自专栏岑志军的专栏

Swift-单例

1675
来自专栏达摩兵的技术空间

跨页面通讯的几种方式

你经常会遇到需要跨标签共享信息的情况,那么本文就跟大家一起回顾下web端有哪些方式可以实现这样的需求。

935
来自专栏前端之路

window.location对象实现页面刷新

1314
来自专栏听雨堂

动态加载控件

参考文章:http://blog.csdn.net/yicko/archive/2005/04/16/349740.aspx 1、加载的是普通的控件,不是用户控...

1727
来自专栏ytkah

dedecms建的网站如何去掉/index.html

DEDECMS建立的网站,www.abc.com/index.html和www.abc.com两个都可以访问,而且两个页面都是一样的,这样就会造成重复页面,对搜...

2616
来自专栏我和PYTHON有个约会

AngularJS爬坑之路——路由关于路由的那点事儿

关于路由,首先想到的是生活中的路由器。 类似路由器,AngularJS中的路由其实也是一样的概念

712
来自专栏lgp20151222

Git远程推送文件太大的error解决

error: RPC failed; curl 56 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errfno 10054

1013

扫码关注云+社区