每次登录或者注册,遇到那串歪歪扭扭、花花绿绿的字,心里总会烦一下。明明几秒钟能填完的事,非要瞪大眼睛辨认半天,有时候还要点几张带红绿灯的图,或者把滑块拖来拖去。这玩意儿到底图个啥?说白了,验证码就是一道门槛,专门用来分辨屏幕对面坐着的到底是个人,还是个自动程序。
早年间互联网刚起来的时候,论坛、邮箱注册都是敞开的。结果很快就有人写脚本,一秒钟注册几百个账号,往论坛里灌广告、发垃圾邮件。服务器被这些机器人折腾得够呛,正常用户反而挤不进去。后来卡内基梅隆大学那帮人琢磨出一个办法,就是给一段扭曲的文字,让用户照着打出来。人眼一看就懂,机器那时候还认不出来,这就是最早的验证码。它拦住的不是人,是那些批量操作的脚本。
那为什么非要弄得花花绿绿、歪七扭八呢?好好写几个字母不行吗?还真不行。如果验证码是工工整整的黑色字体、白色背景,那对机器来说简直是小菜一碟。早年的光学字符识别技术虽然不够成熟,但只要字体固定、位置固定,写个程序去匹配字符库,准确率能到九成以上。所以设计者必须把水搅浑。字体要变形,有的拉长有的压扁,字母要互相重叠,颜色要忽明忽暗,背景里还要撒一堆噪点、画几条干扰线。目的只有一个,让机器在提取特征的时候找不到规律。机器认字靠的是像素排列的固定模式,一旦你把这个模式打乱了,它就抓瞎。而人脑有很强的容错能力,哪怕字被扭成麻花,只要轮廓还在,我们照样能认出来。
不过话说回来,验证码也不是越难越好。谷歌做过大规模的用户体验研究,发现如果验证码太难辨认,用户放弃注册或者登录的比例会明显上升。有数据显示,当验证码的识别难度提高一个等级,用户流失率可能增加百分之十几。所以现在很多网站改用了更聪明的办法,比如reCAPTCHA,它不让你认字,而是让你点几张包含消防栓、斑马线的图片。这个背后其实是拿你的点击去训练人工智能模型,相当于你在免费给谷歌打工,顺便证明了自己是个人。
再后来,滑块验证码也流行起来。你拖动滑块拼图,后台记录的是你拖动时的鼠标轨迹。人手拖动是带加速度、有停顿、有抖动的,而脚本模拟的轨迹往往太完美、太匀速。这个判断标准,比认字要隐蔽得多。有时候你甚至不用做任何操作,只要勾选一下“我不是机器人”,系统就通过分析你打开页面后的鼠标移动、浏览器指纹等信息,默默给你打了个分。

验证码的花哨外表,本质上是一场人和机器之间的军备竞赛。机器越来越聪明,验证码就得越来越刁钻。但反过来,用户耐心是有限的,所以设计者又得在安全和体验之间找平衡。现在有些网站干脆放弃了传统验证码,改用短信验证码或者人脸识别,但那是另一条路子了。说到底,那团花花绿绿的图案,既是挡在垃圾流量前面的墙,也是一面镜子,照出的是人和机器之间那条模糊的边界。下次再遇到验证码,你盯着它费劲辨认的时候,不妨想想,屏幕那头可能正有个程序也在拼命猜,而且它比你还着急。