为了解决 node.js 中生成验证码的问题,社区中有很多方案,但无非以下3种:
- 使用成熟 c++ 模块
- 使用自己开发的 c++ 模块
- 自己写 bmp 库
但是前2个明显不适合我,因为我和我的同事都用的是 windows 系统。 所以我开发了 svg 验证码,内部使用 opentype.js , 把字符转换为 svg 路径,然后生成验证码。这样就不需要任何 c++ 模块,wndows 上轻松运行。
默认生成的验证码:
代颜色的算数式验证码:
使用 npm 安装:
npm i svg-captcha --save
模块自带 ts 定义,使用 ts 或者 vscode 的小伙伴再也不用担心忘记 api 了。
生成图片的大小和速度均适中:
- 相比于 bmp 要小得多(150x50只有5k左右,而bmp100x40就要11k)
- 比 png 要小,但也要看复杂度
- 速度足够快,在我的 windows 笔记本上就有 1700张/s
- 据某个 bmp 验证码库生成,如果那个库不写文字不画噪点,可以12000张/s,但是在 node.js 中随机生成普通的字符串可以有10w到100w每秒,所以 svg 验证码如果不转路径,而是用 <text> ,在服务器上应该可以每秒有几十万张,当然我没有测过
- 如果用 js 直接写 bmp 不仅容易出错(没有成熟的库,你直接写入 buffer 很容易挂且难以调试,等等),如果太简单了容易直接被识别,太复杂了又影响性能。 svg 验证码则是字符串,生成速度适中,要识别的话,对方至少要先转一次格式。
不错,收藏了
收藏
From Noder
额可以
来自酷炫的 CNodeMD
使用中 方便!
赞
话说 php 常用的 gd 库的 node binding 也挺不错… 在 centos & macOs 上安装也挺方便的, 现在线上用的 node-gd, 但就是 not build on Windows …
感谢社区支持。 这个模块并不是给mac用户的,因为直接安装基于c++模块的方案似乎更成熟。
好评,使用c++ 模块就是耍流氓
挺好的,就是可不可以加个配置字体文件的选项,想改字体的话就不用去替换默认的
@mabu233 现在暂时不行,因为 opentype.js 对某些字体(比如google的noto)的支持不行。。。
支持。橙子目前可还好……
已 fo
@lgh06 还好还好……
马克