自己动手用写简单的验证码(JAVA)

自己动手用写简单的验证码(JAVA)

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
    private static final int WIDTH = 100;
    private static final int HEIGHT = 50;
    private static final int NUMBEROF_CODES = 4;
    private static final int NUMBEROF_LINES = 7;
    private static final int FONTSIZE = 16;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 创建图像
        BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_3BYTE_BGR);
        // 获取画笔对象
        Graphics pointer = image.getGraphics();
        // 填充验证码矩形图像的背景色
        pointer.setColor(Color.BLACK);
        pointer.fillRect(0, 0, WIDTH, HEIGHT);
        // 绘制边框
        pointer.setColor(Color.YELLOW);
        pointer.drawRect(0, 0, WIDTH -1, HEIGHT -1);
        // 准备待展示验证码字符集和颜色
        pointer.setColor(Color.WHITE);
        String codeSet = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789";
        // 将验证码绘制在矩形里,并存下字符串值
        Random ran = new Random();
        int last = WIDTH / (NUMBEROF_CODES * 2);
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i < NUMBEROF_CODES; i++) {
            char ch = codeSet.charAt(ran.nextInt(codeSet.length()));
            pointer.setFont(new Font("verdana", Font.BOLD, FONTSIZE));
            pointer.drawString(ch+"",
                    last = ran.nextInt(WIDTH) / NUMBEROF_CODES + last,
                    ran.nextInt((NUMBEROF_CODES - 1) * HEIGHT / NUMBEROF_CODES) + HEIGHT / NUMBEROF_CODES);
            sb.append(ch);
        }
        // 设置干扰线
        pointer.setColor(Color.PINK);
        for(int i = 0; i < NUMBEROF_LINES; i++) {
            int x1 = ran.nextInt(WIDTH), y1 = ran.nextInt(HEIGHT);
            int x2 = ran.nextInt(WIDTH), y2 = ran.nextInt(HEIGHT);
            pointer.drawLine(x1, y1, x2, y2);
        }

        // 将图片输出到页面展示
        ImageIO.write(image, "jpg", resp.getOutputStream());
    }
}

原文地址:https://www.cnblogs.com/fromneptune/p/12371546.html

时间: 2024-11-09 22:45:59

自己动手用写简单的验证码(JAVA)的相关文章

Java用正则表达式写简单账号密码注册判断

Java写简单账号密码注册判断 菜鸟刚学的表达式 练手代码. 1 /*在注册时通常要验证用户名和密码是否合法,运用学习过的知识完成如下操作: 2 3 用户名长度大于等于6位,必须包含数字和英文字母 4 5 密码长度大于等于8位,必须包含特殊符合_或者$,英文字母以及数字 6 7 以上两个条件同时成立注册才能成功. 8 9 10 11 * */ 12 13 import java.util.Scanner; 14 15 import java.util.regex.Matcher; 16 17 i

java实现生成简单图片验证码

原文:java实现生成简单图片验证码 源代码下载地址:http://www.zuidaima.com/share/1550463428840448.htm 项目载图: 该项目要转换为Dynamic web project http://www.zuidaima.com/blog/1618162161323008.htm 另外缺少jar包: http://www.zuidaima.com/jar/search/jstl-1.0.1.htm http://www.zuidaima.com/jar/s

java使用servlet画出最简单的验证码一

前面已经说明验证码存在的意义,接下来本片文章将讲解如何实现一个简单的验证码. 在进行表单设计时,验证码的增加可以实现是否为"人为"操作,增加验证码可以防止网站数据库信息的冗杂... 验证码作为一个图片,在页面中是"画"出来的,那么它是如何画出来的呢? 其中需要几个生成图片的类: { 1.BufferedImage图像数据缓冲区 2.Graphics绘制图片 3.color获取颜色 4.Random获取随机数 5.ImageIO输出图片 } =============

简单的验证码

简单的验证码 验证码 1. 本质:图片 2. 目的:防止恶意表单注册 创建CheckCodeServlet 并在其中写验证码 package wdnmd.web.servlet; import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; impor

解析最简单的验证码

最近在学python,正好遇到学校需要选宿舍,就用python写了一个抢宿舍的软件.其中有一个模块是用来登陆的,登陆的时候需要输入验证码,不过后来发现了直接可以绕过验证码直接登陆的bug.不过这是另外的话题,开始的时候我并没有发现这个隐藏起来的秘密,所以我就写了这个python代码段用来实现解析验证码的功能. 我们学校的验证码是最简单的验证码,形式大概如下: 其中这个图片的大小是60X24像素的,大概每个数字的大小是15X24像素. 观察这个验证码之后可以发现,验证码中只有数字而且数字的字体很规

java能不能自己写一个类叫java.lang.System/String正确答案

原文: http://www.wfuyu.com/php/22254.html 未做测试 ! 最近学习了下java类加载相干的知识.然后看到网上有1道面试题是 能不能自己写个类叫java.lang.System? 网上提供的答案:通常不可以,但可以采取另类方法到达这个需求.所谓的另类方法指自己写个类加载器来加载java.lang.System到达目的. 首先表明下我的观点.上述答案完全是误导读者,是不正确的答案.我就疑惑了网上怎样把这类完全不正确的搜索结果排在前面,而且几近搜到的都是这类不正确的

ASP.NET 如何做出简单的验证码

如果说要做验证码,那不得不提的就是GDI+绘图了.我们都知道验证码是以图片形式展示的,而且是动态生成的,这样就需要我们去画出它. 科普一下,什么是GDI+? GDI+是图形设备接口(GDI)的高级版本, 提供了各种丰富的图形图像处理功能.GDI+主要由二维矢量图形.图像处理和版式3部分组成.GDI+为使用各种字体.字号和样式来显示文本这种复杂任务提供了大量的支持. 下面说说验证码,对于验证码这样的图片,我觉得是由两部分组成的,一部分是矩形的背景,另一部分是在其上的字母数字组合(有的时候有汉字,有

单一功能学习----简单的验证码

一.验证码的作用 1.防止大量重复请求.一般在登录的时候需要验证码,验证码的作用就是拖延时间,让每次登录的操作时间间隔变长,这样可以防止有人暴力破解密码登录. 二.设计思路 1.最简单的验证码,就是一串数字了.小时候看到的就是这个样子的,4个数字. 2.这串数字应该是随机的. 3.这串数字是可以更换的(以前看到的换一张按钮). 4.要有一个输入框,输入验证码. 5.每登录一次,若失败应该更换验证码. 6.稍微高级一点,验证码可以变成一张图片,防止恶意软件直接从前端代码获取验证码值. 7.更高级的

python 简单图像识别--验证码

python  简单图像识别--验证码 记录下,准备工作安装过程很是麻烦. 首先库:pytesseract,image,tesseract,PIL windows安装PIL,直接exe进行安装更方便(https://files.cnblogs.com/files/Oran9e/PILwin64.zip)(https://files.cnblogs.com/files/Oran9e/PILwin32.zip) 安装 image:pip install image 安装 pytesseract:pi