杨校老师课堂之编写验证码

简介: 杨校老师课堂之编写验证码

前言

关于验证码
  1. 有时候我们需要客户在注册账号时,程序发出一个验证码到客户所输入的Email内,此时我们需要制作文本的字符串验证码
  2. 当我们需要客户在登录时输入验证码时,此时的验证码为图片验证码

/*
* 1, 字符串类型的验证码
*/
public class VerificationCodeUtil{

  /**
     * 验证码的来源
     */
    final char [] code = {
      '0','1','2','3','4','5','6','7','8','9',
      'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
      'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
    };


    /**
     * 字体
     */
    final String [] fontNames = {
           "黑体","宋体","微软雅黑"
    };

    /**
     * 字体样式
     */
    final int [] fontStyles = {
            Font.BOLD, Font.ITALIC
    };

    /**
     * 字体大小
     */
    private  int  fontSize = 21;

    /**
     * 验证码的长度
     */
    private  int  vcodeLen = 4;

    /**
     * 验证码图片的宽度
     */
    private  int  width = (fontSize+1) * vcodeLen + 10;

    /**
     *验证码图片的高度
     */
    private  int  height = fontSize+12;


    /**
     * 干扰线条数
     */
    private  int disturbline = 4;;
  
   /**
     * 生成验证码
     * @return 字符串的验证码
     */
    public  String  generatorVCode(){
        //  获取字母的字符数组长度
        int len = code.length;

        Random random = new Random();

        StringBuffer stringBuffer = new StringBuffer();

        for (int i = 0; i < vcodeLen; i++) {

            int index = random.nextInt(len);

            stringBuffer.append(code[index]);
        }

        return stringBuffer.toString();
    }

    /**
     * 生成验证码图片
     * @param vcode    验证码
     * @param drawline  干扰线
     * @return  验证码图片
     */
    public  BufferedImage  generatorVCodeImage(String vcode, boolean drawline){
            // 创建验证码的图片
        BufferedImage  bufferedImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        Graphics graphics = bufferedImage.getGraphics();

        graphics.fillRect(0,0,width,height);
        graphics.setColor(new Color(198, 189, 108));

        if (drawline){
            drawDisturbline(graphics);
        }
        Random random = new Random();

        for (int i = 0; i < vcode.length(); i++) {
            //      设置字体
            graphics.setFont(new Font(fontNames[random.nextInt(fontNames.length)],fontStyles[random.nextInt(fontStyles.length)],fontSize));
            //      设置随机颜色
            graphics.setColor(getRandomColor());

            graphics.drawString(vcode.charAt(i)+"", i * fontSize  +10 , fontSize+5);
        }
        graphics.dispose();

        return bufferedImage;
    }

    /**
     * 获取随机颜色
     * @return
     */
    private Color getRandomColor() {
        Random random = new Random();
      return  new Color(  random.nextInt(220),random.nextInt(220),random.nextInt(220));
    }

    /**
     * 生成干扰线
     * @param graphics 画笔
     * @return 干扰线
     */
    private Boolean drawDisturbline(Graphics graphics) {
        Random random = new Random();
        for (int i = 0; i < disturbline; i++) {
            int x1 = random.nextInt(width);
            int y1 = random.nextInt(height);
            int x2 = random.nextInt(width);
            int y2 = random.nextInt(height);

            //  设置随机颜色
            graphics.setColor(getRandomColor());

            // 画画干扰线
            graphics.drawLine(x1,y1,x2,y2);
        }
        return true;
    }

}
  
目录
相关文章
|
5月前
|
Java 索引
杨老师课堂_Java教程第四篇之数组运用
杨老师课堂_Java教程第四篇之数组运用
39 0
|
5月前
|
Java
杨老师课堂_Java教程第五篇之函数运用
杨老师课堂_Java教程第五篇之函数运用
26 1
|
5月前
|
Java
杨老师课堂_Java教程第三篇之控制语句
杨老师课堂_Java教程第三篇之控制语句
27 1
|
5月前
|
Java API 数据安全/隐私保护
杨校老师课堂之Java面向对象知识点整理集锦2
杨校老师课堂之Java面向对象知识点整理集锦
39 0
|
5月前
|
机器学习/深度学习 Java API
杨校老师课堂之Java面向对象知识点整理集锦3
杨校老师课堂之Java面向对象知识点整理集锦
22 0
|
5月前
|
Java 编译器 开发工具
杨校老师课堂之Java面向对象知识点整理集锦1
杨校老师课堂之Java面向对象知识点整理集锦
23 0
|
5月前
|
Android开发
杨老师课堂_安卓教程第一篇之入门
杨老师课堂_安卓教程第一篇之入门
35 0
|
5月前
杨校老师课堂之工具类-验证身份证信息编写
杨校老师课堂之工具类-验证身份证信息编写
31 0
|
5月前
|
Java Maven
杨校老师课堂之就业信息平台
杨校老师课堂之就业信息平台
30 0
|
5月前
杨校老师课堂之Servlet的重构为BaseServlet的步骤【内含视频讲解】
杨校老师课堂之Servlet的重构为BaseServlet的步骤【内含视频讲解】
28 0