2018年到了。新年伊始,我们的APP就被人盯上了,不断有人狂刷发送验证码,一天刷了几万次。虽然后台也做了限制,拦截了一大部分请求,苦于对方Ip一直在变,技术不够不能将其彻底杀死。我们添加了图形验证码来解决这个问题,后期还会优化服务端请求,采用更加安全的方式,先来介绍图形验证码吧。
思路:根据随机数获取图形验证码,然后校验图形验证码,校验通过则允许发送验证码;
随机数的生成规则:后台自定义规定的,我们是32位字母加数字,字母大写
贴上我的随机数生成:
- (NSString *)return32LetterAndNumber:(NSInteger)num{
//定义一个包含数字,大小写字母的字符串
NSString * strAll = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSString * result = [[NSMutableString alloc]initWithCapacity:num];
for (int i = 0; i < num; i++){
NSInteger index = arc4random() % (strAll.length-1);
char tempStr = [strAll characterAtIndex:index];
result = (NSMutableString *)[result stringByAppendingString:[NSString stringWithFormat:@"%c",tempStr]];
}
return result;
}
开发中遇到一些小问题,测试说图形验证码输入正确后点击键盘的done,却显示检验失败。我调试看到系统键盘点击done时发现,你正确输入的关键词是第一个,但是默认选中的是第二个推荐词!
出现两个问题:
1、text filed 有个特性,手动选择第一个推荐词他会在后面自动添加一个空格,导致校验失败;
2、点击键盘的done ,很容易忽略键盘选中提交的是第二个关键词也校验失败
。 如图所示:
解决办法;
将textField 的推荐关键词功能关掉,以前一直忽略的这个属性;
代码是:
{
textField.autocorrectionType = UITextAutocorrectionTypeNo;
}
这样就能完美解决这个图形验证码的问题拉