kaptcha(验证码生成类库)

1. maven 

        
            com.google.code.kaptcha
            kaptcha
            2.3
        

或 

        
            com.github.penggle
            kaptcha
            2.3.2
        

2 . API 

2.1 基础API

描述 方法 描述
DefaultKaptcha 默认验证码生成器 createText() 获取验证码文本
createImage(String text) 生成验证码图片对象
setConfig(Config config) 设置配置信息,无参获取配置信息
Config 配置对象,方法都为get方法,获取各配置信息 Config(Properties properties) 构造方法,获取配置对象

2.2 配置常量(Constants)

常量 描述 默认
KAPTCHA_SESSION_KEY  session key KAPTCHA_SESSION_KEY
KAPTCHA_SESSION_DATE session date KAPTCHA_SESSION_DATE
KAPTCHA_SESSION_CONFIG_KEY session key KAPTCHA_SESSION_KEY
KAPTCHA_SESSION_CONFIG_DATE session date KAPTCHA_SESSION_DATE
KAPTCHA_BORDER  是否有边框 默认为我们可以自己设置yes,no true
KAPTCHA_BORDER_COLOR 边框颜色 BLACK
KAPTCHA_BORDER_THICKNESS 边框厚度  
KAPTCHA_NOISE_COLOR 干扰 颜色,合法值: r,g,b 或者 white,black,blue. black
KAPTCHA_NOISE_IMPL 干扰实现类 com.google.code.kaptcha.impl.DefaultNoise
KAPTCHA_OBSCURIFICATOR_IMPL 图片样式 com.google.code.kaptcha.impl.WaterRipple
KAPTCHA_PRODUCER_IMPL 图片实现类 com.google.code.kaptcha.impl.DefaultKaptcha
KAPTCHA_TEXTPRODUCER_CHAR_STRING 文本集合,验证码值从此集合中获取 abcde2345678gfynmnpwx
KAPTCHA_TEXTPRODUCER_CHAR_LENGTH 验证码长度 5
KAPTCHA_TEXTPRODUCER_FONT_NAMES  字体 Arial, Courier
KAPTCHA_TEXTPRODUCER_FONT_COLOR  字体颜色,合法值: r,g,b 或者 white,black,blue. black
KAPTCHA_TEXTPRODUCER_FONT_SIZE 字体大小 40px
KAPTCHA_TEXTPRODUCER_CHAR_SPACE  文字间隔 2

 KAPTCHA_TEXTPRODUCER_IMPL

文本实现类 com.google.code.kaptcha.text.impl.DefaultTextCreator
KAPTCHA_BACKGROUND_IMPL  背景实现类 com.google.code.kaptcha.impl.DefaultBackground
KAPTCHA_BACKGROUND_CLR_FROM 背景颜色渐变,开始颜色 light grey
KAPTCHA_BACKGROUND_CLR_TO 背景颜色渐变, 结束颜色 white
KAPTCHA_IMAGE_WIDTH  验证码图片宽度  200
KAPTCHA_IMAGE_HEIGHT 验证码图片高度  50
KAPTCHA_WORDRENDERER_IMPL    

一些内置配置类:

配置项 配置值 描述
KAPTCHA_NOISE_IMPL com.google.code.kaptcha.impl.DefaultNoise 默认干扰线
com.google.code.kaptcha.impl.NoNoise 无干扰线
KAPTCHA_OBSCURIFICATOR_IMPL com.google.code.kaptcha.impl.WaterRipple 水纹
com.google.code.kaptcha.impl.FishEyeGimpy 鱼眼
com.google.code.kaptcha.impl.ShadowGimpy 阴影
KAPTCHA_PRODUCER_IMPL com.google.code.kaptcha.impl.DefaultKaptcha 默认图片实现类
KAPTCHA_BACKGROUND_IMPL  com.google.code.kaptcha.impl.DefaultBackground 默认背景实现类
KAPTCHA_TEXTPRODUCER_IMPL com.google.code.kaptcha.text.impl.DefaultTextCreator 默认文本实现类

3. 示例

3.1 简单验证码生成

        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        Properties properties = new Properties();
        //todo 添加配置
        properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160");
        properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60");
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        String text = defaultKaptcha.createText();
        BufferedImage image = defaultKaptcha.createImage(text);
        //输出文本及图片
        System.out.println(text);
        ImageIO.write(image,"png",new File("D:\\demo\\kaptcha\\"+System.currentTimeMillis()+".png"));

3.2 四则运算文本实现类

package com.ruoyi.framework.config;

import java.security.SecureRandom;
import java.util.Random;

import com.google.code.kaptcha.text.impl.DefaultTextCreator;

/**
 * 验证码文本生成器
 */
public class KaptchaTextCreator extends DefaultTextCreator {
    private static final String[] CNUMBERS = "0,1,2,3,4,5,6,7,8,9,10".split(",");
    @Override
    public String getText() {
        Integer result = 0;
        Random random = new SecureRandom();
        int x = random.nextInt(10);
        int y = random.nextInt(10);
        StringBuilder suChinese = new StringBuilder();
        int randomoperands = (int) Math.round(Math.random() * 2);
        if (randomoperands == 0) {
            result = x * y;
            suChinese.append(CNUMBERS[x]);
            suChinese.append("*");
            suChinese.append(CNUMBERS[y]);
        } else if (randomoperands == 1) {
            if (!(x == 0) && y % x == 0) {
                result = y / x;
                suChinese.append(CNUMBERS[y]);
                suChinese.append("/");
                suChinese.append(CNUMBERS[x]);
            } else {
                result = x + y;
                suChinese.append(CNUMBERS[x]);
                suChinese.append("+");
                suChinese.append(CNUMBERS[y]);
            }
        } else if (randomoperands == 2) {
            if (x >= y) {
                result = x - y;
                suChinese.append(CNUMBERS[x]);
                suChinese.append("-");
                suChinese.append(CNUMBERS[y]);
            } else {
                result = y - x;
                suChinese.append(CNUMBERS[y]);
                suChinese.append("-");
                suChinese.append(CNUMBERS[x]);
            }
        } else {
            result = x + y;
            suChinese.append(CNUMBERS[x]);
            suChinese.append("+");
            suChinese.append(CNUMBERS[y]);
        }
        //TODO 获取文本用@分割,前者为验证码文本,后者为结果
        suChinese.append("=?@" + result);
        return suChinese.toString();
    }
}

3.3 中文文本实现类

package com.example.project.demo;
import com.google.code.kaptcha.text.impl.DefaultTextCreator;
import java.io.UnsupportedEncodingException;
import java.util.Random;

/**
 * 验证码文本生成器   验证码字体应设置为中文字体
 */
public class ChineseTextCreator extends DefaultTextCreator {
    @Override
    public String getText() {
        int length = getConfig().getTextProducerCharLength();
        return getRandomJianHan(length);
    }

    /**
     * 获取指定长度随机简体中文
     */
    private String getRandomJianHan(int len) {
        StringBuffer ret = new StringBuffer();
        for (int i = 0; i < len; i++) {
            String str = null;
            int hightPos, lowPos; // 定义高低位
            Random random = new Random();
            hightPos = (176 + Math.abs(random.nextInt(39))); //获取高位值
            lowPos = (161 + Math.abs(random.nextInt(93))); //获取低位值
            byte[] b = new byte[2];
            b[0] = (new Integer(hightPos).byteValue());
            b[1] = (new Integer(lowPos).byteValue());
            try {
                str = new String(b, "GBk"); //转成中文
            } catch (UnsupportedEncodingException ex) {
                ex.printStackTrace();
            }
            ret.append(str);
        }
        return ret.toString();
    }
}

 

 

你可能感兴趣的:(开发总结,API)