kaptcha(验证码生成类库)

1. maven 

        <dependency>
            <groupId>com.google.code.kaptcha</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3</version>
        </dependency>

或 

        <dependency>
            <groupId>com.github.penggle</groupId>
            <artifactId>kaptcha</artifactId>
            <version>2.3.2</version>
        </dependency>

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 keyKAPTCHA_SESSION_KEY
KAPTCHA_SESSION_DATEsession dateKAPTCHA_SESSION_DATE
KAPTCHA_SESSION_CONFIG_KEYsession keyKAPTCHA_SESSION_KEY
KAPTCHA_SESSION_CONFIG_DATEsession dateKAPTCHA_SESSION_DATE
KAPTCHA_BORDER 是否有边框 默认为我们可以自己设置yes,notrue
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_IMPLcom.google.code.kaptcha.impl.DefaultNoise默认干扰线
com.google.code.kaptcha.impl.NoNoise无干扰线
KAPTCHA_OBSCURIFICATOR_IMPLcom.google.code.kaptcha.impl.WaterRipple水纹
com.google.code.kaptcha.impl.FishEyeGimpy鱼眼
com.google.code.kaptcha.impl.ShadowGimpy阴影
KAPTCHA_PRODUCER_IMPLcom.google.code.kaptcha.impl.DefaultKaptcha默认图片实现类
KAPTCHA_BACKGROUND_IMPL com.google.code.kaptcha.impl.DefaultBackground默认背景实现类
KAPTCHA_TEXTPRODUCER_IMPLcom.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();
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑重其事,鹏程万里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值