验证码的故事 (1)

老网民们大概都记得,刚开始上网的时候,是不存在验证码(captcha)这么一种东西的。这造成的结果是,垃圾评论和垃圾邮件可以轻松通过任何一个网站的注册程序,通过各种方式轰炸人民群众的眼球。

最先想要解决这一问题的是雅虎——作为互联网时代早期最重要的免费邮件提供商,他们一方面要解决用户们每天遇到的数以百计的垃圾邮件轰炸,另一方面,他们自己的免费邮箱,恰恰又是垃圾邮件的最爱——耗费无数资源所阻止的垃圾邮件,都来自于自己的服务器。这让雅虎开始认真考虑如何解决人机辨识问题。

互联网最早出现的captcha

他们找到一位当时刚刚21岁的天才——Luis Von Ahn。 而 Luis Von Ahn 给出的方案,就是这个让人民群众微微皱眉,但是让计算机耸肩挠头的验证码 captcha。计算机辨识技术还很落后,对于经过扭曲、污染的文字,无法辨识。而人类却可以轻松认出这些文字。这是一个简单而巧妙的设计,计算机先是产生一个随机的字符串,然后用程序把这个字符串的图像进行随机的污染,扭曲,再显示给显示器前的人或者机器。凡是能够辨识这些字符的,即为人类。

Luis Von Ahn

故事还没完,Luis Von Ahn 是那种追求完美的科学家。当全世界数以十亿计的人每天都会浪费几秒钟的时间参与辨认文字这一简单活动的时候,他开始思考,其中浪费的人脑智力是否能得到更好的应用呢?

Luis Von Ahn 的最终设计是,让人们用这些脑力解决一些计算机无法解决的图书数字化。

在计算机时代以前,印刷术已经存在了数百年,但这些印刷术所产生的书本和报纸等等,对于计算机来说都是模拟信号,仅以图像的形式存在,而非以数字化的形式存在。但是,早期的印刷术并不精确,文字大小不一,形象有差别。而且因为印刷品年代久远,拥有各种细微的缺损和污染。这对人眼来说不是什么大问题,但对计算机来说就麻烦了。

因此,2002年,Luis Von Ahn开始让 captcha 引用各种无法被计算机辨识的文字图像,目前,已经有上万网站采用他的新一代 captcha。每天帮助辨识数以百万计的古老文档。

问题在于,对于最初的 captcha 来说,计算机实际上是知道答案的。而 Luis 希望人们辨识的文字,计算机实际上是不知道答案的,那如何能验证返回的答案到底是不是真的呢?

解决这个问题的方法依然体现了 Luis 一贯的简洁和优美,他让人们每次辨识两个,而非一个 captcha,其中一个来自于计算机随机生成的字符串,而另一个则是从文档中选取的计算机不认识的字符图像。只要人们对前一个字符串给出的答案是正确的,那么就判定,人们对后一个 captcha 的辨识是正确的。

目前在 google、yahoo、youtube 等各个网站都能看到的双 captcha,一个是需要辨认的文档图像,一个是计算机生成的 captcha

用这一方法,Luis 的 captcha 2.0 已经帮助完成了整个纽约时报130年的报纸存档数字化——这一本可能花费无数时间和资源的工程,在几个月之内就由各位网友们完成了。

本文分享自微信公众号 - Crossin的编程教室(crossincode),作者:佚名

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-01-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 把你开发的网站免费发布到互联网上(2)

    前几天,我们介绍了通过 PythonAnywhere 在互联网上创建一个站点: 把你开发的网站免费发布到互联网上(1) 本篇是上一篇的延续,来讲一讲如何将已有的...

    Crossin先生
  • 这段代码实例,见证了数万人入门编程

    我的微信 Python 教程里有两个比较重要的代码实例,一个是前期的“猜数字”,这个例子演示了基本的输入输出、运算、类型、逻辑,之后的扩展又涉及到函数、数据结构...

    Crossin先生
  • 答同学问

    很多大学今天开始新学期了,咱们教室也增加了不少新同学。刚来的同学,可以发送p查看python入门课程的目录,也可以直接发送1~53,进入对应的课程。不用被已经进...

    Crossin先生
  • Source Insight 4.0初用(下)

    这个窗口是显示文档的符号的,那么文档内容哪些是符号呢,这个应该是看文档窗口是设置哪种语言来解析文档的。

    云深无际
  • HDUOJ-------Being a Good Boy in Spring Festival

    Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others)    Me...

    Gxjun
  • JavaWeb(三)servlet

    Servlet * 什么是Servlet 是运行在web服务器端的Java应用程序,它使用JAVA语言编写,具有Java语言的优点。与Java程序的区别:Ser...

    二十三年蝉
  • 腾讯与港铁首期合作正式启动 在港可享移动支付自助购票体验

    12月16日,腾讯与香港铁路有限公司(下称“港铁”)首期合作将正式启动。届时,香港市民在罗湖/落马洲站搭乘港铁时,可在站点自助售票机上使用微信香港钱包支付,畅享...

    企鹅号小编
  • 三歪建议 去工作之前 最好学学这个技术

    之前遇到过很多同学私信问我:「三歪,我马上要实习了,我要在实习前学些什么做准备啊?」

    Java3y
  • python基础之字符编码

    计算机由美国人发明,最早的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系。最多只能用 8 位来表示(一个字节),即:2**8 = 25...

    py3study
  • nginx+php-fpm出现502 bad gateway错误解决方法

    老七Linux

扫码关注云+社区

领取腾讯云代金券