easy_captcha生成算术公式只要“十”和“X”
easy_captcha图形验证码算术规则替换
这款图形验证码有算术、英文数字、中文几种展示效果,我在使用了比较简单的算术类型后,发现会计算减法产生负数结果,让一些老眼昏花的用户体验不好,所以就重写下父类方法,把减法替换为加法。
maven引入依赖包
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
自定义工具类CaptchaUtils
import com.wf.captcha.ArithmeticCaptcha;
import lombok.extern.slf4j.Slf4j;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
/**
* easy-captcha图形验证码工具
* 继承算术类型:仅保留加法、乘法
*/
@Slf4j
public class CaptchaUtils extends ArithmeticCaptcha {
public CaptchaUtils(int width, int height) {
super(width, height);
}
public String text() {
//获取父类算术公式,将减法替为加法。
String verifyCode = super.getArithmeticString().replaceAll("-", "+");
//log.info("原公式{}", super.getArithmeticString());
//log.info("新公式{}", verifyCode);
//将已有的公式替换掉
super.setArithmeticString(verifyCode);
try {
verifyCode = verifyCode.replaceAll("x", "*");
ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
//重新计算并替换父类参数值
super.chars = String.valueOf(jse.eval(verifyCode.substring(0, verifyCode.length() - 2)));
} catch (ScriptException e) {
log.error("图形验证码值计算异常", e);
}
return chars;
}
}
实现类中使用
CaptchaUtils captcha = new CaptchaUtils(111, 36);
captcha.setLen(2);
String result = captcha.text().toLowerCase(Locale.ROOT);
log.info("图片=", captcha.toBase64());
log.info("值=", result );
效果
代码能用就行,欢迎同行指正