关于验证码的一些想法

验证码是一种区分用户是计算机还是人的公共全自动程序,由卡内基梅隆大学的四位教授提出的。正确键入验证码,才可以继续用户行为,所以验证码能够有效的防止恶意破解密码、刷票、论坛灌水、刷页等。验证码一般在注册、登录、留言回复、绑定、支付等场景下出现。
其表现形态多种多样大致如图:
机器产生的验证码,应该有以下特点: 
(1)机器在短时间内可以生成大量不相同的问题
(2)人可以在短时间内回答出来
(3)机器无法在短时间内回答出
验证码的存在有其必要性,但用户为之付出了很高的使用成本,据统计用户停留在验证码的时间超过5.5秒,大大影响了用户的对产品的体验感受。那么我们如何权衡利弊,在安全和易用性上做取舍呢?生活中接触到的最普遍的验证码,是以字母、阿拉伯数字出现的,我们针对这一种验证码着重进行分析。
一、验证码的出现
原则是:非必要的时候尽量不用验证码。例如:同一用户名或同一IP地址3次输入错误的时候,才启用验证码。
二、验证码的识别
在“字母/数字”验证码中,主要是防止通过OCR软件识别那些容易辨认的验证码,同时要提高人眼的辨识度,可以通过颜色,字体,减少干扰等方式。例如:1、L、I、0、O、Q、g、9、2、Z、类似的字母都不应当出现在验证码,以降低用户识别难度。
三、统一输入类型
最好统一为单一类型识别,如:全部字母,全部数字。建议不要混合输入,混合输入的缺点是需要切换输入区域;还有因没切换中英文输入而打出中文的可能。
四、输入大小写问题
验证码最好采取输入时不区分字母大小写,统一识别,并在旁边提示用户可不区分大小写。在验证码图片显示时,最好统一为小写或大写字母,便于识别,输入框锁定英文输入,以免打出汉字。
五、验证码的长度
在允许的条件下,验证码不要过长,通常我们见到的都是4位的验证码。当然也有以英文单词作为验证码,也不失为一个好的办法。
六、验证码刷新问题
当用户更改验证码时,验证码应当保证能够快速刷新,减少用户驻留时间。一般会默认点击验证码自动刷新,最好能够提示用户“如何刷新”,快速引导用户。
七、验证码输入错误时
最好能在用户输入时,及时判定验证码是否输入正确,而不要等到用户点击提交后,再告诉用户“您的验证码输入错误!”。如果用户输入错误时,尽量将用户损失降到最低。尽量降低验证码刷新机制,更多的保存用户已经填过的信息,不要让用户反复填写表单。
  • 将需要填写验证码的信息与非必要验证信息相分隔也是一个好办法
八、其他问题
  • 网页缓存:验证码输入框不需要记录历史内容;
  • 全角/半角问题:输入法的全角/半角输入的数字是不一样的,即全角数字1234和半角数字1234是不同的。一般输入默认为半角,当用户输入全角时提示用户切换。
最后:验证码每天都在重新设计,如果真的有一种完美的验证码,早就流行开了,而你没看到是因为那些方案都比现在的更不靠谱而已。
原文链接:,转发请注明来源!

发表评论