{"id":15068807,"url":"https://github.com/ramostear/happy-captcha","last_synced_at":"2026-03-05T02:03:21.110Z","repository":{"id":46320069,"uuid":"264247227","full_name":"ramostear/Happy-Captcha","owner":"ramostear","description":"Happy Captcha是一款易于使用的Java验证码软件包，旨在花最短的时间，最少的代码量，实现Web站点的验证码功能。Happy Captcha完全遵循Apache 2.0开源许可协议，你可以自由使用该软件，如您在使用Happy Captcha时发现软件的任何缺陷，欢迎随时与我联系。","archived":false,"fork":false,"pushed_at":"2020-07-10T15:03:39.000Z","size":13126,"stargazers_count":130,"open_issues_count":6,"forks_count":35,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-09T14:54:13.493Z","etag":null,"topics":["animation","arithmetic","captcha","chinese","java8","number"],"latest_commit_sha":null,"homepage":"https://www.ramostear.com/doc/happy-captcha-document","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ramostear.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-05-15T16:43:44.000Z","updated_at":"2025-07-08T08:01:02.000Z","dependencies_parsed_at":"2022-09-09T13:12:22.181Z","dependency_job_id":null,"html_url":"https://github.com/ramostear/Happy-Captcha","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ramostear/Happy-Captcha","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramostear%2FHappy-Captcha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramostear%2FHappy-Captcha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramostear%2FHappy-Captcha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramostear%2FHappy-Captcha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ramostear","download_url":"https://codeload.github.com/ramostear/Happy-Captcha/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ramostear%2FHappy-Captcha/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30106156,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T01:39:18.192Z","status":"online","status_checked_at":"2026-03-05T02:00:06.710Z","response_time":93,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["animation","arithmetic","captcha","chinese","java8","number"],"created_at":"2024-09-25T01:39:20.021Z","updated_at":"2026-03-05T02:03:21.085Z","avatar_url":"https://github.com/ramostear.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Happy Captcha v 1.0.1使用教程\n\n\u003cimg src=\"https://cdn.ramostear.com/20200517-dd314274729a49ae9f0af5acfb721661.png\" style=\"zoom:150%;display:block;margin:1px auto;\" /\u003e\n\n![](https://img.shields.io/badge/Name-HappyCaptcha-brightgreen) ![](https://img.shields.io/badge/Version-1.0.1-brightgreen) ![](https://img.shields.io/badge/JDK-JDK1.8-brightgreen) ![](https://img.shields.io/badge/License-Apache2.0-brightgreen) ![](https://img.shields.io/badge/Author-ramostear-brightgreen)\n\n___\n\n\n\n## 前言\n\nHappy Captcha是一款易于使用的Java验证码软件包，旨在花最短的时间，最少的代码量，实现Web站点的验证码功能。Happy Captcha完全遵循Apache 2.0开源许可协议，你可以自由使用该软件，如您在使用Happy Captcha时发现软件的任何缺陷，欢迎随时与我联系。\n\nHappy Capthca的源代码已托管到Github和Gitee，你可以访问下面的链接获取更多信息：\n\n- Github: https://github.com/ramostear/Happy-Captcha\n- Gitee: https://gitee.com/ramostear/Happy-Capthca\n\n如果你想快速体验Happy Captcha的功能，可通过下列方式获取Happy-Captcha依赖：\n\n**Maven**\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.ramostear\u003c/groupId\u003e\n  \u003cartifactId\u003eHappy-Captcha\u003c/artifactId\u003e\n  \u003cversion\u003e1.0.1\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n**Gradle**\n\n```tex\nimplementation 'com.ramostear:Happy-Captcha:1.0.1'\n```\n\n\n\n## 一、展示\n\nHappy Captcha提供了图片和动画两种展现形式，验证码内容包括中文(收录3500个常用汉字)，阿拉伯数字(0~9)，中文数字(零至九)，中文大写数字(零至玖)，数字与字母混合(0~9-a~z-A~Z)，数字与小写字母混合(0~9-a~z)，数字与大写字母混合(0~9-A~Z)，纯小写字母，纯大写字母，大小写字母混合以及运算表达式(阿拉伯数字运算表达式和中文运算表达式)等12种类型。\n\n| CaptchaType       | IMAGE                                                  | ANIMATION                                               |\n| ----------------- | ------------------------------------------------------ | ------------------------------------------------------- |\n| CHINESE           | ![](https://cdn.ramostear.com/20200517-b85c90ace5e046a1b0b67852ad92d3d6.gif)           | ![](https://cdn.ramostear.com/20200517-743f2bfb64c34b2bba0cd20ee35c9986.gif)           |\n| NUMBER            | ![](https://cdn.ramostear.com/20200517-f8007e501a28488da2d86b5d2b4bceee.gif)            | ![](https://cdn.ramostear.com/20200517-e87c6a695e8c4c6e8daecc76587abd5c.gif)            |\n| NUMBER_ZH_CN      | ![](https://cdn.ramostear.com/20200517-123ff18985624b9dad1bbb8db2ea32be.gif)      | ![](https://cdn.ramostear.com/20200517-dae662da68354ef2bdd72e6dcfd32323.gif)      |\n| NUMBER_ZH_HK      | ![](https://cdn.ramostear.com/20200517-1604c3c839a34be98c3ba8a1f2f6b90a.gif)      | ![](https://cdn.ramostear.com/20200517-bd85dbab3d114fb1b9991a22173a5a44.gif)      |\n| DEFAULT           | ![](https://cdn.ramostear.com/20200517-2901645f02a345abbffd87f65281dd1b.gif)           | ![](https://cdn.ramostear.com/20200517-116b1c09565844149a6eba62274fefb1.gif)           |\n| WORD              | ![](https://cdn.ramostear.com/20200517-869723e081ed4ab3b80865ece65fe601.gif)              | ![](https://cdn.ramostear.com/20200517-19c9f984c9ce48e2acd04bd2259b8c1e.gif)              |\n| WORD_LOWER        | ![](https://cdn.ramostear.com/20200517-8eeb3d8d7aae4f34b860a83ec3bcf6ba.gif)        | ![](https://cdn.ramostear.com/20200517-2c1ca7e558d2478b9a36c98e4e26fad9.gif)        |\n| WORD_UPPER        | ![](https://cdn.ramostear.com/20200517-beccb84d7b694ee2ae01f5be352e8186.gif)        | ![](https://cdn.ramostear.com/20200517-da790fd7c37447e0a15ca7c6a15bd923.gif)        |\n| WORD_NUMBER_LOWER | ![](https://cdn.ramostear.com/20200517-38053139f5364a1e84fb461e8dca41e3.gif) | ![](https://cdn.ramostear.com/20200517-b2361d16531444809dc8f8e638c67419.gif) |\n| WORD_NUMBER_UPPER | ![](https://cdn.ramostear.com/20200517-b9ece2469f7f44c499d53042cb60f648.gif) | ![](https://cdn.ramostear.com/20200517-55a7d5ab5a654f889100d378a39b3a31.gif) |\n| ARITHMETIC        | ![](https://cdn.ramostear.com/20200517-14f204937d79489ab13292c78f5e6243.gif)        | ![](https://cdn.ramostear.com/20200517-2a486afd170b40e184d68094e8580a1e.gif)        |\n| ARITHMETIC_ZH     | ![](https://cdn.ramostear.com/20200517-d54bf607d2064cc7808bd5f1241d5fd9.gif)     | ![](https://cdn.ramostear.com/20200517-40aa89d739e54af2a9258d534b8b3d05.gif)     |\n\n\n\n## 二、安装\n\n如果你的项目使用的是Maven进行依赖管理，你只需向pom.xml文件添加下面的配置即可：\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.ramostear\u003c/groupId\u003e\n  \u003cartifactId\u003eHappy-Captcha\u003c/artifactId\u003e\n  \u003cversion\u003e1.0.1\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nGradle用户则可以通过引入如下的配置获取Happy Captcha:\n\n```tex\nimplementation 'com.ramostear:Happy-Captcha:1.0.1'\n```\n\n\n\n## 三、使用\n\nHappyCaptcha在设计时力求过程的简洁，在默认情况下，你只需要书写一行代码即可生成漂亮的验证码图片。下面是HappyCaptcha的使用示例：\n\n```java\n@Controller\npublic class HappyCaptchaController{\n    @GetMapping(\"/captcha\")\n    public void happyCaptcha(HttpServletRequest request,HttpServletResponse response){\n        HappyCaptcha.require(request,response).build().finish();\n    }\n}\n```\n\n对于HappyCaptcha而言，只有request和response是必须提供的参数，其余参数都可以使用缺省值。\n\n\u003e 在默认情况下，HappyCaptcha生成的验证码以图片形式展现，内容为0~9-a~z-A~Z的字符随机组合，字符长度为5，图片宽度为160，高度为50，字体为微软雅黑。\n\n\n\n## 四、校验\n\n用户输入的验证码校验是一个必不可少的环节，HappyCaptcha内置了对用户输入的验证码校验功能。下面是验证码校验示例：\n\n```java\n@Controller\npublic class CaptchaController{\n \n    @PostMapping(\"/verify\")\n    public String verify(String code,HttpServletRequest request){\n        //Verification Captcha\n        boolean flag = HappyCaptcha.verification(request,code,true);\n        if(flag){\n            //Other operations...\n        }\n    }\n}\n```\n\n\u003e 如果在校验过程中需要忽略字母大小写，第三个参数设置为true，如果需要强校验，则设置为false。\n\n\n\n## 五、清理\n\n当验证码被使用后，你可以通过HappyCaptcha类种的remove()方法将Session中存放的验证码清理掉。下面是清理验证码的代码示例：\n\n```java\n@Controller\npublic class HappyCaptchaController{\n    \n    @GetMapping(\"/remove/captcha\")\n    public void removeCaptcha(HttpServletRequest request){\n     \tHappyCaptcha.remove(request);   \n    }\n}\n```\n\n\u003e 除HappyCaptcha提供的默认方法，你也可以在需要操作的地方，手动清理Session中存放的验证码，HappyCaptcha验证码的Key为“happy-captcha”。\n\n\n\n## 六、高级特性\n\n通过前面的内容，我们已经了解到如何快熟的安装并使用HappyCaptcha生成验证码。在接下的内容当中，将介绍HappyCaptcha更详细的内容。\n\n### 6.1 style()\n\nHappyCaptcha提供两种验证码展现形式：图片和动画。默认的展现形式为图片，可以通过style()方法修改默认值。style()方法的值由CaptchaStyle类提供，可供选择的值有IMG和ANIM。style()使用示例如下：\n\n```java\nHappyCaptcha.require(request,response)\n    \t    .style(CaptchaStyle.ANIM)\n            .build().finish(); \n```\n\n\u003e 若展现形式为图片，则style(CaptchaStyle.IMG)可以省略。\n\n\n\n### 6.2 type()\n\nHappyCaptcha一共提供了12种验证码类型，你可以自由选择其中的一种类型作为验证码的内容形式。默认情况下，验证码使用数字和大小写字母的混合形式。验证码类型值由CaptchaType类提供，内容如下表：\n\n| 值                | 说明                                 |\n| ----------------- | ------------------------------------ |\n| DEFAULT           | 数字、大小写字母随机组合             |\n| ARITHMETIC        | 加、减、乘算数运算表达式             |\n| ARITHMETIC_ZH     | 中文简体加、减、乘算数运算表达式描述 |\n| CHINESE           | 常见汉字（3500个）随机组合           |\n| NUMBER            | 0~9数字随机组合                      |\n| NUMBER_ZH_CN      | 中文数字（零至九）随机组合           |\n| NUMBER_ZH_HK      | 中文繁体数字（零至玖）随机组合       |\n| WORD              | 大小写字母随机组合                   |\n| WORD_LOWER        | 小写字母随机组合                     |\n| WORD_UPPER        | 大写字母随机组合                     |\n| WORD_NUMBER_LOWER | 数字、小写字母随机组合               |\n| WORD_NUMBER_UPPER | 数字、大写字母随机组合               |\n\ntype()使用示例如下：\n\n```java\nHappyCaptcha.require(request,response)\n    \t\t.type(CaptchaType.CHINESE)\n    \t\t.build().finish();\n```\n\n\n\n### 6.3 length()\n\nlength()方法用于设置验证码字符长度，默认情况下缺省值为5。你可以通过以下方式对验证码字符长度进行控制：\n\n```java\nHappyCaptcha.require(request,response)\n    \t\t.length(6)\n    \t\t.build().finish();\n```\n\n\n\n### 6.4 width()\n\nwidth()方法可对验证码图片的宽度进行调节，默认的缺省值为160。使用方式如下：\n\n```java\nHappyCaptcha.require(request,response)\n    \t\t.width(180)\n    \t\t.build().finish();\n```\n\n\n\n### 6.5 height()\n\n同width()方法一样，height()方法用于设置验证码图片的高度，默认缺省值为50。使用方式如下：\n\n```java\nHappyCaptcha.require(request,response)\n    \t\t.height(60)\n    \t\t.build().finish();\n```\n\n\n\n###  6.6 font()\n\n如果你想改变验证码的字体，可通过font()方法进行设置，默认缺省字体为微软雅黑。HappyCaptcha内置了四种字体，可以通过Fonts类进行调用。\n\n```java\nHappyCaptcha.require(request,response)\n    \t\t.font(Fonts.getInstance().zhFont())\n    \t\t.build().finish();\n```\n\n\n\n### 6.7 链式调用\n\n上面介绍了如何修改单个配置，HappyCaptcha支持链式调用，可同时对验证码的多个属性进行设置。例如：\n\n```java\n@GetMapping(\"/captcha\")\npublic void captcha(HttpServletRequest req,HttpServletResponse res){\n    HappyCaptcha.require(req,res)\n        \t\t.style(CaptchaStyle.ANIM)\t\t\t//设置展现样式为动画\n        \t\t.type(CaptchaType.CHINESE)\t\t\t//设置验证码内容为汉字\n        \t\t.length(6)\t\t\t\t\t\t\t//设置字符长度为6\n        \t\t.width(220)\t\t\t\t\t\t\t//设置动画宽度为220\n        \t\t.height(80)\t\t\t\t\t\t\t//设置动画高度为80\n        \t\t.font(Fonts.getInstance().zhFont())\t//设置汉字的字体\n        \t\t.build().finish();      \t\t\t//生成并输出验证码\n}\n```\n\n\u003e 若验证码的类型为ARITHMETIC或ARITHMETIC_ZH,可省略验证码长度的设置。算术运算表达式的长度为5。\n\n\n\n## 结束语\n\nHappy Captcha参考了一些优秀的验证码框架设计，同时引用了一些第三方的编码类，在此统一表示感谢！如果你觉得Happy Captcha对你有所帮助，扫描下方二维码，请作者喝杯咖啡吧~~~\n\n\u003cimg src=\"https://cdn.ramostear.com/20200517-3e0ee533b55d418bb3162ac361e569a6.png\" style=\"zoom:40%;\" /\u003e **OR** \u003cimg src=\"https://cdn.ramostear.com/20200517-e11f53ac0c104bb19c91154730e7195b.jpg\" style=\"zoom: 25%;\" /\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framostear%2Fhappy-captcha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Framostear%2Fhappy-captcha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Framostear%2Fhappy-captcha/lists"}