PHPackages                             markthink/think-no-captcha - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. markthink/think-no-captcha

ActiveProject[Authentication &amp; Authorization](/categories/authentication)

markthink/think-no-captcha
==========================

参照淘宝注册验证实现的No-CAPTCHA验证库，No-CAPTCHA是GOOGLE推出的一项验证码服务，国内有类似的实现比如极验。

1263CSS

Since Feb 15Pushed 10y ago1 watchersCompare

[ Source](https://github.com/MarkThink/ThinkNoCaptcha)[ Packagist](https://packagist.org/packages/markthink/think-no-captcha)[ RSS](/packages/markthink-think-no-captcha/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependenciesVersions (1)Used By (0)

\#ThinkNoCaptcha

参照淘宝注册验证实现的No-CAPTCHA验证库，No-CAPTCHA是GOOGLE推出的一项验证码服务，国内有类似的实现比如极验。

\###实现步骤

下载成语库SQL,写到MYSQL数据表中，为了加快访问速度，首次加载将这些成语写入到redis缓存中(缓存所有-小于或等于七个汉字的成语数据)，以后加载就不需要查询mysql数据库了。

通过PHP函数array\_rand返回一个随机成语的3个键名数组,通过redis的hmget方法就可以取出三个随机的成语。

之后在计算无重复标识汉字，分拆汉字，过滤逗号，获取唯一性的验证汉字集合，在通过array\_rand返回一个随机标识汉字，将此标识汉字和三条成语记录下来。接下来生成背景图片，在背景图片的基础上随机位置将前面生成三条成语转成图片附加在背景上，生成成语的过程也在拆分汉字，并计算各个汉字的坐标位置，并记录下来，当生成的汉字与标识汉字一样时，才真正把此坐标位置保存下来。

有了坐标区域，此时就可以通过鼠标点击来确定是否与Session中存储的坐标一致，进而达到验证的目的。

[![成语验证01](images/idiom01.png)](images/idiom01.png)[![成语验证02](images/idiom02.png)](images/idiom02.png)[![字母验证](images/valicode.png)](images/valicode.png)[![验证成功](images/success.png)](images/success.png)

###  Health Score

23

—

LowBetter than 26% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/3c25982b15e06f2ca01c4c97a5a3d03f113510cb911dc9f6270a3eae8ad10315?d=identicon)[dxwsker](/maintainers/dxwsker)

---

Top Contributors

[![brucehex](https://avatars.githubusercontent.com/u/31442823?v=4)](https://github.com/brucehex "brucehex (3 commits)")

### Embed Badge

![Health badge](/badges/markthink-think-no-captcha/health.svg)

```
[![Health](https://phpackages.com/badges/markthink-think-no-captcha/health.svg)](https://phpackages.com/packages/markthink-think-no-captcha)
```

###  Alternatives

[kartik-v/yii2-password

Useful password strength validation utilities for Yii Framework 2.0

761.3M17](/packages/kartik-v-yii2-password)[vitalybaev/laravel5-dkim

Laravel 5/6 package for signing outgoing messages with DKIM.

3163.1k](/packages/vitalybaev-laravel5-dkim)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
