# EasyCaptcha
![MavenCentral](https://img.shields.io/maven-central/v/com.github.whvcse/easy-captcha?style=flat-square)
![Hex.pm](https://img.shields.io/hexpm/l/plug.svg?style=flat-square)
## 1.简介
 Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。
---
## 2.效果展示
![验证码](https://s2.ax1x.com/2019/08/23/msFrE8.png)
  
![验证码](https://s2.ax1x.com/2019/08/23/msF0DP.png)
  
![验证码](https://s2.ax1x.com/2019/08/23/msFwut.png)
<br/>
![验证码](https://s2.ax1x.com/2019/08/23/msFzVK.gif)
  
![验证码](https://s2.ax1x.com/2019/08/23/msFvb6.gif)
  
![验证码](https://s2.ax1x.com/2019/08/23/msFXK1.gif)
**算术类型:**
![验证码](https://s2.ax1x.com/2019/08/23/mskKPg.png)
  
![验证码](https://s2.ax1x.com/2019/08/23/msknIS.png)
  
![验证码](https://s2.ax1x.com/2019/08/23/mskma8.png)
**中文类型:**
![验证码](https://s2.ax1x.com/2019/08/23/mskcdK.png)
  
![验证码](https://s2.ax1x.com/2019/08/23/msk6Z6.png)
  
![验证码](https://s2.ax1x.com/2019/08/23/msksqx.png)
**内置字体:**
![验证码](https://s2.ax1x.com/2019/08/23/msAVSJ.png)
  
![验证码](https://s2.ax1x.com/2019/08/23/msAAW4.png)
  
![验证码](https://s2.ax1x.com/2019/08/23/msAkYF.png)
---
## 3.导入项目
### 3.1.gradle方式的引入
```text
dependencies {
compile 'com.github.whvcse:easy-captcha:1.6.2'
}
```
### 3.2.maven方式引入
```xml
<dependencies>
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
```
### 3.3.jar包下载
[easy-captcha-1.6.2.jar](https://gitee.com/whvse/EasyCaptcha/releases)
maven导入jar包,在项目根目录创建`libs`文件夹,然后pom.xml添加如下:
```
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.1</version>
<systemPath>${basedir}/libs/easy-captcha-1.6.2.jar</systemPath>
</dependency>
```
---
## 4.使用方法
### 4.1.在SpringMVC中使用
```java
@Controller
public class CaptchaController {
@RequestMapping("/captcha")
public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
CaptchaUtil.out(request, response);
}
}
```
前端html代码:
```html
<img src="/captcha" width="130px" height="48px" />
```
> 不要忘了把`/captcha`路径排除登录拦截,比如shiro的拦截。
### 4.2.在servlet中使用
web.xml中配置servlet:
```xml
<web-app>
<!-- 图形验证码servlet -->
<servlet>
<servlet-name>CaptchaServlet</servlet-name>
<servlet-class>com.wf.captcha.servlet.CaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CaptchaServlet</servlet-name>
<url-pattern>/captcha</url-pattern>
</servlet-mapping>
</web-app>
```
前端html代码:
```html
<img src="/captcha" width="130px" height="48px" />
```
### 4.3.判断验证码是否正确
```java
@Controller
public class LoginController {
@PostMapping("/login")
public JsonResult login(String username,String password,String verCode){
if (!CaptchaUtil.ver(verCode, request)) {
CaptchaUtil.clear(request); // 清除session中的验证码
return JsonResult.error("验证码不正确");
}
}
}
```
### 4.4.设置宽高和位数
```java
@Controller
public class CaptchaController {
@RequestMapping("/captcha")
public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 设置位数
CaptchaUtil.out(5, request, response);
// 设置宽、高、位数
CaptchaUtil.out(130, 48, 5, request, response);
// 使用gif验证码
GifCaptcha gifCaptcha = new GifCaptcha(130,48,4);
CaptchaUtil.out(gifCaptcha, request, response);
}
}
```
### 4.5.不使用工具类
 CaptchaUtil封装了输出验证码、存session、判断验证码等功能,也可以不使用此工具类:
```java
@Controller
public class CaptchaController {
@RequestMapping("/captcha")
public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 设置请求头为输出图片类型
response.setContentType("image/gif");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// 三个参数分别为宽、高、位数
SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
// 设置字体
specCaptcha.setFont(new Font("Verdana", Font.PLAIN, 32)); // 有默认字体,可以不用设置
// 设置类型,纯数字、纯字母、字母数字混合
specCaptcha.setCharType(Captcha.TYPE_ONLY_NUMBER);
// 验证码存入session
request.getSession().setAttribute("captcha", specCaptcha.text().toLowerCase());
// 输出图片流
specCaptcha.out(response.getOutputStream());
}
@PostMapping("/login")
public JsonResult login(String username,String password,String verCode){
// 获取session中的验证码
String sessionCode = request.getSession().getAttribute("captcha");
// 判断验证码
if (verCode==null || !sessionCode.equals(verCode.trim().toLowerCase())) {
return JsonResult.error("验证码不正确");
}
}
}
```
## 5.更多设置
### 5.1.验证码类型
```java
public class Test {
public static void main(String[] args) {
// png类型
SpecCaptcha captcha = new SpecCaptcha(130, 48);
captcha.text(); // 获取验证码的字符
captcha.textChar(); // 获取验证码的字符数组
// gif类型
GifCaptcha captcha = new GifCaptcha(130, 48);
// 中文类型
ChineseCaptcha captcha = new ChineseCaptcha(130, 48);
// 中文gif类型
ChineseGifCaptcha captcha = new ChineseGifCaptcha(130, 48);
// 算术类型
ArithmeticCaptcha captcha = new ArithmeticCaptcha(130, 48);
captcha.setLen(3); // 几位数运算,默认是两位
captcha.getArithmeticString(); // 获取运算的公式:3+2=?
captcha.text(); // 获取运算的结果:5
captcha.out(outputStream); // 输出验证码
}
}
```
> 注意:<br/>
>  算术验证码的len表示是几位数运算,而其他验证码的len表示验证码的位数,算术验证码的text()表示的是公式的结果,
> 对于算术验证码,你应该把公式的结果存储session,而不是公式。
### 5.2.验证码字符类型
类型 | 描述
:--- | :---
TYPE_DEFAULT | 数字和字母混合
TYPE_ONLY_NUMBER | 纯数字
TYPE_ONLY_CHAR | 纯字母
TYPE_ONLY_UPPER | 纯大写字母
TYPE_ONLY_LOWER | 纯小写字母
TYPE_NUM_AND_UPPER | 数字和大写字母
使用方法:
```
SpecCaptcha captcha = new SpecCaptcha(130, 48, 5);
captcha.setCharType(Captcha.TYPE_ONLY_NUMBER);
```
> 只有`SpecCaptcha`和`GifCaptcha`设置才有效果。
### 5.3.字体设置
内置字体:
字体 | 效果
:--- | :---
Captcha.FONT_1 | ![](https://s2.ax1x.com/2019/08/23/msMe6U.png)
Captcha.FONT_2 | ![](https://s2.ax1x.com/2019/08/23/msMAf0.png)
Captcha.FONT_3 | ![](https://s2.ax1x.com/2019/08/23/msMCwj.png)
Captcha.FONT_4 | ![](https://s2.ax1x.com/2019/08/23/msM9mQ.png)
Captcha.FONT_5 | ![](https://s2.ax1x.com/2019/08/23/msKz6S.png)
Captcha.FONT_6 | ![](https://s2.ax1x.com/2019/08/23/msKxl8.png)
Captcha.FONT_7 | ![](https://s2.ax1x.com/2019/08/23/msMPTs.png)
Captcha.FONT_8 | ![](https://s2.ax1x.com/2019/08/23/msMmXF.png)
Captcha.FONT_9 | ![](https://s2.ax1x.com/2019/08/2
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
资源推荐
资源详情
资源评论
收起资源包目录
Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。.zip (40个子文件)
cm
EasyCaptcha.iml 953B
pom.xml 5KB
src
test
java
com
wf
captcha
CaptchaTest.java 2KB
main
resources
fresnel.ttf 74KB
ransom.ttf 35KB
progbot.ttf 85KB
prefix.ttf 97KB
lexo.ttf 76KB
headache.ttf 44KB
epilog.ttf 29KB
robot.ttf 44KB
scandal.ttf 40KB
actionj.ttf 34KB
java
com
wf
captcha
ArithmeticCaptcha.java 3KB
ChineseGifCaptcha.java 5KB
GifCaptcha.java 5KB
ChineseCaptcha.java 3KB
servlet
CaptchaServlet.java 831B
utils
CaptchaUtil.java 5KB
Encoder.java 9KB
Quant.java 14KB
GifEncoder.java 15KB
base
ArithHelper.java 5KB
Calculator.java 7KB
ArithmeticCaptchaAbstract.java 2KB
Captcha.java 9KB
ChineseCaptchaAbstract.java 4KB
Randoms.java 2KB
SpecCaptcha.java 3KB
LICENSE 11KB
.idea
uiDesigner.xml 9KB
libraries
Maven__junit_junit_4_7.xml 460B
Maven__javax_servlet_javax_servlet_api_3_1_0.xml 590B
vcs.xml 180B
misc.xml 459B
compiler.xml 632B
modules.xml 262B
encodings.xml 172B
.gitignore 268B
README.md 11KB
共 40 条
- 1
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Javascript和Python的微商城项目设计源码 - MicroMall
- 基于Java的网上订餐系统设计源码 - online ordering system
- 基于Javascript的超级美眉网络资源管理应用模块设计源码
- 基于Typescript和PHP的编程知识储备库设计源码 - study-php
- Screenshot_2024-05-28-11-40-58-177_com.tencent.mm.jpg
- 基于Dart的Flutter小提琴调音器APP设计源码 - violinhelper
- 基于JavaScript和CSS的随寻订购网页设计源码 - web-order
- 基于MATLAB的声纹识别系统设计源码 - VoiceprintRecognition
- 基于Java的微服务插件集合设计源码 - wsy-plugins
- 基于Vue和微信小程序的监理日志系统设计源码 - supervisionLog
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功