CAPTCHA 这名字听起来很诡异,其实中文里面我们管他叫图片认证码,是用来防机器人注册发帖的。现在互联网上面机器人遍地都是,没有个认证码挡着,用不了多久就会被灌满垃圾广告。这东西最早似乎是卡内基梅隆大学的人研制的,然后把技术提供给了 Yahoo 之类的地方。如今 CAPTCHA 可谓是遍地开花,各种开源的商业的实现一把一把,还有 QQ 的中文认证码之类扩展版本。

这个小 blog 也尝试过一些图形认证码插件,比如 SecureImage 之类,但是最后还是放弃了,SecureImage 的性能实在是不敢恭维,Yodao 和 Baidu 不知道为什么看上生成图片的那个链接了,总是没完没了地抓它,虽然频率并不是非常高,大概也就每秒一次,但是系统的负载已经很高了。最后我终于无法忍受,换成了另外一个基于 Javascript 计算的 WP-HashCash。然后我就发现原来支持 Javascript 的机器人已经很多了,以前用 SecureImage 的时候,几乎没有 spam,WP-HashCash 用了以后每天进来我都要从一大堆留言里面捡出来有用的批准。实在是非常不爽。

reCAPTCHA 是卡内基梅隆大学的一帮人搞出来的,它的技术并没有什么先进之处,但是创意有点意思。世界上面有很多将图书电子化的计划,基本是把书籍扫描了以后用 OCR 软件识别。有些情况下面 OCR 软件自己觉得某些词的识别结果并不是非常有把握。通常情况下面是通过雇佣劳力来肉眼校对。reCAPTCHA 项目认为这个工作不妨交给全世界大量填写认证码的人来完成。

一般图形认证码系统都是只生成一个单词的,reCAPTCHA 生成的图片里面有两个单词,其中一个是机器生成的,有正确结果的单词,另一个则是扫描出来的有问题的单词,这个词没有正确结果。如果用户提交上来的结果里面机器生成的那个是对的,那么系统就认为另外一个也很有可能是对的。一幅扫描图片展示给多个用户如果结果都是一样的,他就将这个结果作为最终校对结果。这样就实现了利用人力来分布式校对文稿的目的。更具体的细节可以看 http://recaptcha.net/learnmore.html

reCAPTCHA 对一般用户使用没有限制,但是为了防止滥用,也要像 Google Maps API 那样用一个 Key 来限制一下,在 recaptcha.net 上面可以免费申请。同时还有常见系统的认证插件,比如这个 blog 使用的就是那里提供的 wordpress 插件。

PS: 各位留言的时候要注意一下,因为 reCAPTCHA 的目标是校对书籍,因此认证码是大小写敏感的,有时候你还能看到里面有标点符号,这时候也麻烦你把标点符号输入了。虽然这时候基本能判断出来有标点符号的那个是扫描图片,就算填错也可以过认证,但是出于校对书籍的需要,还是填写全面比较好一些了。