最新公告
  • 欢迎您光临极客文库,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 随机获取字母数字组合

    功能很简单,就是使用Java生成字母数字混合的验证码并输出到网页中,代码中的注释都很详细了,就不多废话了,如果自己能看懂代码那就真的学会了,如果有疑问可以在下面留言。

    package com.jikewenku.code;
    
    import javax.servlet.http.HttpServletResponse;
    import java.util.Random;
    
    /**
     * 验证码工具类
     */
    public class CaptcahCode {
        /**
         * 验证码的生成方法
         *
         * @param response
         * @return
         */
        public static String drawImage(HttpServletResponse response) {
            //1:定义字符串拼接的StringBuilder
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < 4; i++) {
                builder.append(randomChar());
            }
            String code = builder.toString();
            System.out.println(code);
            return null;
        }
    
        /**
         * 此方法用于产生随机数字母和数字
         *
         * @return
         */
        private static char randomChar() {
            //1:定义验证码需要的字母和数字
            String string = "QWERTYUIOPASDFGHJKLZXCVBNM0123456789";
            //2:定义随机对象
            Random random = new Random();
            return string.charAt(random.nextInt(string.length()));
        }
    
        public static void main(String[] args) {
            CaptcahCode.drawImage(null);
        }
    }
    

    运行程序,每次运行都会在控制台打印输出四位不同的字母数字的组合作为我们的验证码,至此我们完成了第一步,获取到了字母数字的随机组合。

    验证码绘制

    继续完成上面的代码,进行验证码绘制工作。

    package com.jikewenku.code;
    
    import javax.imageio.ImageIO;
    import javax.servlet.http.HttpServletResponse;
    import java.awt.*;
    import java.awt.font.FontRenderContext;
    import java.awt.geom.Rectangle2D;
    import java.awt.image.BufferedImage;
    import java.util.Random;
    
    /**
     * 验证码工具类
     */
    public class CaptcahCode {
        /**
         * 验证码的生成方法
         *
         * @param response
         * @return
         */
        public static String drawImage(HttpServletResponse response) {
            //1:定义字符串拼接的StringBuilder
            StringBuilder builder = new StringBuilder();
            //准备产生4个字符串的随机数
            for (int i = 0; i < 4; i++) {
                builder.append(randomChar());
            }
            String code = builder.toString();
            //2:定义图片的宽度和高度
            int width = 120;
            int height = 25;
            //建立bufferdImage对象,制定图片的长度和宽度以及颜色
            BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
            //3:获取到Graphics2D绘制对象,开始绘制验证码
            Graphics2D g = bi.createGraphics();
            //4:设置文字的字体和大小
            Font font = new Font("微软雅黑", Font.PLAIN, 20);
            //设置字体颜色
            Color color = new Color(0, 0, 0);
            //设置字体
            g.setFont(font);
            //设置颜色
            g.setColor(color);
            //设置背景
            g.setBackground(new Color(226, 226, 240));
            //开始绘制对象
            g.clearRect(0, 0, width, height);
            //绘制形状,获取矩形对象
            FontRenderContext context = g.getFontRenderContext();
            Rectangle2D bounds = font.getStringBounds(code, context);
            //计算文件的坐标和间距
            double x = (width - bounds.getWidth()) / 2;
            double y = (height - bounds.getHeight()) / 2;
            double ascent = bounds.getY();
            double baseY = y - ascent;
            g.drawString(code, (int) x, (int) baseY);
            //结束绘制
            g.dispose();
            try {
                ImageIO.write(bi, "jpg", response.getOutputStream());
                //刷新响应流
                response.flushBuffer();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
    
            return code;
        }
    
        /**
         * 此方法用于产生随机数字母和数字
         *
         * @return
         */
        private static char randomChar() {
            //1:定义验证码需要的字母和数字
            String string = "QWERTYUIOPASDFGHJKLZXCVBNM0123456789";
            //2:定义随机对象
            Random random = new Random();
            return string.charAt(random.nextInt(string.length()));
        }
    
        public static void main(String[] args) {
            CaptcahCode.drawImage(null);
        }
    }
    

    生成验证码页面

    新建一个code.jsp

    <%@ page import="com.jikewenku.code.CaptcahCode" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
    
        //1:清空浏览器缓存,目的是为了清空浏览器的缓存,因为浏览器
        //会对网站的资源文件和图像进行记忆存储,如果被浏览器加载过的图片就记忆起来,记忆以后
        //文件就不会和服务器在交互,如果我们验证不清空的话可能会造成一个问题就是:验证刷新以后没有效果。
        response.setHeader("pragma","no-cache");
        response.setHeader("cache-control","no-cache");
        response.setHeader("expires","0");
    
        //2:调用编写的生成验证码的工具
        String code = CaptcahCode.drawImage(response);
        session.setAttribute("code",code);
    
        //3:如何解决getOutputStream异常问题
        out.clear();
        out = pageContext.pushBody();
    %>
    

    效果展示页面index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    
      
        java验证码
    	
    	
    	    
      
      
    
         
         看不清?点我
         
      
    
    

    运行index.jsp,打开浏览器访问http://localhost:8080/index.jsp

    如图所示,成功在网页上输出了验证码图片,并且点击“看不清?点我”就会重新刷新一次验证码。

    源码下载

    [fanctdl filename='JavaCode1.zip' filesize='19KB' href='https://pan.baidu.com/s/1-eh6UETfOMzo3Ob0HqB34A' filedown='百度网盘']回复可见密码[/fanctdl]

    密码:

    [reply]smp9[/reply]

    本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
    极客文库 » Java实现验证码教程(一)字母数组混合验证码

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    极客文库
    程序员的加油站

    1 评论

    1. 毕设要求加个验证码 那我寻思就用个优秀一点的吧

    Leave a Reply

    Hi, 如果你对这款模板有疑问,可以跟我联系哦!

    联系发布者

    1 评论

    1. 毕设要求加个验证码 那我寻思就用个优秀一点的吧

    Leave a Reply

    Hi, 如果你对这款模板有疑问,可以跟我联系哦!

    联系发布者
    • 99会员总数(位)
    • 3629资源总数(个)
    • 44本周发布(个)
    • 0 今日发布(个)
    • 105稳定运行(天)

    欢迎加入「极客文库」,成为原创作者从这里开始!

    立即加入 了解更多