客服一周收到四十多条「验证码总是不对」的反馈,日志里失败的输入多半是把数字零填成字母 O、数字一填成小写 l,这几个字符都在字符集里。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,验证码字符集用了全部数字和大写字母,数字零和字母 O、数字一和字母 I 在人眼里几乎一样,加上扭曲和干扰线更难分。校验又区分大小写。
「验证码字符集」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
$chars = 'ABCDEFGHJKMNPQRSTUVWXY3456789'; $code = substr(str_shuffle($chars), 0, 4);
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
具体做法是,字符集去掉 0、O、1、I、l、2、Z 这几个易混字符,换成轮廓差别大的字母和数字;校验前统一转大写,减少大小写造成的失败;抽一百个用户测一次,输错率降到 5% 以下再上线。
最后用这个标准收尾,验证码输错率从三成降到 5% 以内,客服相关反馈明显减少。
