Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

node.js 中生成验证码的另类方案——svg 验证码

$
0
0

为了解决 node.js 中生成验证码的问题,社区中有很多方案,但无非以下3种:

  • 使用成熟 c++ 模块
  • 使用自己开发的 c++ 模块
  • 自己写 bmp 库

但是前2个明显不适合我,因为我和我的同事都用的是 windows 系统。 所以我开发了 svg 验证码,内部使用 opentype.js , 把字符转换为 svg 路径,然后生成验证码。这样就不需要任何 c++ 模块,wndows 上轻松运行。

默认生成的验证码:

example.png

代颜色的算数式验证码:

example-2.png

项目地址

使用 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 验证码则是字符串,生成速度适中,要识别的话,对方至少要先转一次格式。

Viewing all articles
Browse latest Browse all 14821

Trending Articles