不知道你是否跟我一样,每每遇到输入验证码的场景,就感觉心累。验证码看似简单,但其实又暗藏玄机,小小的验证码设计的好会给用户惊喜,设计不好则很可能错失一个宝贵的用户! 验证码(CAPTCHA)是一种区分用户是计算机还是人的公共全自动程序。简单来说,验证码就是为验证某个操作是人为还是机器行为。当然,区别人为和机器行为有很多方案,但在实际生产中,考虑到实现成本、安全性、可用性等因素,验证码就是最优方案了,所以被广泛使用。 验证码主要作用 1、防止登录时对密码进行暴力破解:对于组成简单的密码,如果没有验证码,暴力破解密码后就可直接登录,有了验证码以后,程序难以识别验证码,就无法完成验证码的输入,也就无法登陆成功。 2、防止黑客恶意攻击从而导致服务器压力太大而崩溃:如论坛灌水、刷页、刷票等,有些论坛回复需要输入验证码就是出于这个目的。 验证码常见的表现形式及优化方案 1、数字、字母、中文的组合 这种形式的验证码是最常见、实现最简单的验证码。通常由数字、字母混合组成,也有单纯使用数字或字母的,为了提高辨别难度,一般都会加入干扰线,如在背景中添加干扰线等。 图1 :中文验证码 优点:实现成本低。 缺点:用户需要在鼠标-键盘、中英文之间切换(对于中英文混合的验证码),看似只是简单的输入几个字母或数字,实际却需要多步操作,且不具备任何趣味性。 优化: 增加验证码字符个数或者使用混合中英文都可以提高安全性,但尽量通过增加字符个数而非使用混合中英文形式,因为这样可以减少用户切换中英文输入的操作。 如果验证码中存在英文字母,最好统一大小写,并给出验证码不区分大小写的提示,尽管大部分情况下,用户自己知道验证码不区分大小写。 尽量不要使用难以辨别的字符如"1、l、0、O、Z、2"等。 2、图片辨别 提到这种形式,我第一反映就是被大家吐槽的12306的图片验证码,本以为动动鼠标就能很快操作完成,省去了各种切换,但由于图片太相似,反而很容易出错,费时费力。 图2:图片辨别验证码 优点:相较于第一种形式,操作简单,只需要点击鼠标即可完成。 缺点:如果图片太过相似(比如给你几个韩国女明星让你去选),会大大增加用户的输入成本,甚至引起用户的反感。 3、滑块 这种是比较有创意的验证码形式,通常需要用户拖动滑块从到特定位置,则代表验证成功。 图3:滑块验证码 优点:操作简单、趣味性强。 缺点:实现成本较高。 优化:可以从提高趣味性入手,在用户拖动完成后可给出用户花费的时间及打败了百分之多少用户,就像一个小小的游戏一样。 4、手机短信 这种形式常见于手机APP(相较于PC端)的登录、注册等业务,随着手机的普及,许多APP都采用手机号码注册,为验证手机号码的真实性、防止恶意注册,一般都会发送验证码到手机。对于开通了自动读取手机短信权限的APP来说,可自动获取手机验证码自动填充,非常便捷。 图4:手机短信验证码 优点:适用性广,除了防止恶意注册登录外,同时完成了对手机号码真实性的校验,一举两得。 缺点:需要一个专门的短信发送平台,并向电信运营商支付短信费用,部分APP的短信等待时间偏长,影响用户体验。 优化:使用短信发送验证码时,把验证码尽量放在短信的前面,这样用户不需要双击短信进入短信查看就能看到验证码。 5、手机语音验证码 这种形式主要是对由于各种原因无法正常接收短信验证码的补救措施,比如在短信验证码的输入框旁边会有小小的提示"收不到验证码?",点击提示可使用语音验证码。 图5:语音验证码 部分产品在设计登录验证码时,只有输入密码超过3次才要求用户输入验证码,也就是说3次以内就能破解的概率如果非常之小,完全可以在登录时密码输入错误3次后才要求输入验证码,也是不错的设计。 结语: 验证码虽然用的非常广泛,表面上看起来也并不会增加太多操作,但如非必要,千万不可滥用。验证码的具体表现形式非常多,具体使用哪种验证码,需要综合考虑开发成本、用户体验等多个因素。