12306的图形图形验证码,曾经把全国抢票的验证人逼疯过。2019年春运,图形我蹲在路由器旁边刷票,验证屏幕上弹出一排模糊的图形图片,让我“点击所有包含烟囱的验证图片”。我眯着眼辨认了半天,图形点了三张,验证系统提示“验证失败”。图形再试,验证又失败。图形票没了。验证那一刻我盯着那些灰扑扑的图形烟囱,真想顺着网线爬过去问问设计者:你家烟囱长这样?验证
图形验证码的本质,是图形一道反向图灵测试。它假设人类能轻松完成某些任务,而机器不行。早期就是扭曲字母,后来机器学会了OCR,于是字母越扭越厉害,加噪点、加干扰线,直到人类自己都认不出来。再后来,谷歌搞出reCAPTCHA,让你勾选“我不是机器人”,顺便帮你标注马路、红绿灯、斑马线——你每验证一次,就在给自动驾驶数据集打工。这招挺聪明,但用久了也变味。现在有些验证码,纯粹是为了防机器而防机器,用户体验被扔到一边。
我见过最离谱的一个,是某银行登录页。它让你从九宫格里选出“所有微笑的猫”。九张猫脸,有的嘴角上扬,有的只是眯着眼,有的根本就是面无表情。我点了四张,错了。系统说“请重试”,又换了一批猫。我怀疑它自己都分不清哪只猫在笑。这种验证码防住了谁?防住了我。
真正的问题在于,图形验证码的难度曲线是单向的。机器越来越强,验证码就得越来越难。可人类的视觉识别能力没变。于是差距越拉越大,最后变成只有机器和少数视力超群的人能通过。普通用户成了牺牲品。更讽刺的是,有些验证码连机器都骗不过了——用深度学习模型跑一遍,准确率比人还高。那它到底在验证什么?验证你比AI更笨吗?
也有做得好的。比如那种“滑动拼图”验证码,你拖一下滑块,把缺口补上。动作自然,不费脑子,后台通过轨迹分析判断你是人还是脚本。还有“点击倒立文字”的,虽然偶尔也烦,但至少逻辑清晰。关键区别在于:好的验证码是在验证“你是人”,而不是在刁难“你是人”。前者是门槛,后者是酷刑。
我后来学乖了。遇到那种九宫格选图的,直接刷新换一个。换到滑动拼图为止。如果刷新三次还是选图,我就关掉页面,换个时间再来。这不是我懒,是我算过账:跟验证码较劲的每一秒,都在降低我抢到票的概率。验证码本来是为了区分人和机器,结果逼得人像机器一样机械地刷新、重试、放弃。这算不算一种黑色幽默?
说到底,图形验证码是个过渡方案。生物识别、行为分析、无感验证,这些技术已经在替代它。但过渡期有多长,没人知道。在那之前,我只能祈祷下次遇到的验证码,别让我选“所有看起来开心的消防栓”。