整理旧硬盘时发现以前写的两个captcha库,我以前曾经有一段时间专门负责游戏中anti-robot的工作,利用captcha是必不可少的一个手段,这两个项目都是在实际项目中使用过的,所以稳定性很高。我花了点时间上传到github上了,希望能够帮到仍旧还想利用这个方法的人。
captcha的原理是在服务器端生成一张包含只有人类才能识别的图片,然后在客户端显示,我写的第一个库libcapt也是利用了同样的原理,将字符串通过一定的变形、扭曲,并增加了噪音和背景色差之后显示,在服务器端的调用方法如下
//加载字体文件
libCapt::FontFile fontFile;
fontFile.loadFromDataStream(…);
libCapt::Generator generator(&fontFile);
//生成一张图片包含文字信息的内存
libCapt::Question question;
generator.generateQuestion(question);
libCapt::FontFile fontFile;
fontFile.loadFromDataStream(…);
libCapt::Generator generator(&fontFile);
//生成一张图片包含文字信息的内存
libCapt::Question question;
generator.generateQuestion(question);
其中Question结构里是一块256×64大小16bit的图片内容,四个共用户选择的答案和一个正确的答案,另外这个库还提供了一份字体文件的产生工具和测试工具captUtil。
源码下载地址如下
https://github.com/thejinchao/libcapt |
---|
另外一个库libWaveCapt使用了比较有趣的方式,生成一块包含波纹信息的图片,然后让用户选择波纹的中心。这个库使用了libnoise这个开源库,libnoise能够产生随机噪图案,是一个很有意思的库,可惜已经很久不更新了。libWaveCapt同样提供了captUtil供测试使用
源码下载地址如下
https://github.com/thejinchao/libWaveCapt |
---|