验证码之图像验证码
Posted iOS的美丽岁月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证码之图像验证码相关的知识,希望对你有一定的参考价值。
1、在App的开发中,各种验证码层出不穷。
现在主流的验证码方式是: 1、手机验证码:就是用户使用手机获取短信得到验证码,在输入App中。2、就是App 生成图形,展示在用户的手机上,用户根据图片展示输入验证码。下面我们就对第二种进行探究。
2、先看本博客实现的效果
3、呼朋唤友
群的特点:
1、iOS 开发交流群,每周都有更新新的内容。
2、群里有3~5年的资深开发者。
3、群员在App开发过程中遇到什么问题,可以在群里提问。
4、群员在App开发中,如果遇到难实现的功能或者模块,可以在群里提出,有人员帮助你实现。
5、加入群后,可以get到App 开发中的一些小功能模块。
群号是:185341804 群名字:成功QQ吧
群主号:1542100658 (qq)
4、代码展示
1》 工程中的使用代码
VerificationCodeLable * lable = [[VerificationCodeLable alloc]initWithFrame:CGRectMake(130, 100+ i*80, 100, 30)];
[self.view addSubview:lable];
2》网络获取验证码的数值
/**
获取验证码的值
*/
-(void)getVerificationCodeValue
/**
防止重复点击
*/
CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();
CFAbsoluteTime saveTime = [[[NSUserDefaults standardUserDefaults] objectForKey:@"CurrentTime"] doubleValue];
if (startTime -saveTime >2000)
[[NSUserDefaults standardUserDefaults] setObject:@(startTime) forKey:@"CurrentTime"];
[[NSUserDefaults standardUserDefaults] synchronize];
/**
创建接受数据
*/
responseData = [NSMutableData dataWithCapacity:0];
/**
可以重新获取验证码的值
*/
NSURLSession * session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask * Task = [session dataTaskWithURL:[NSURL URLWithString:@""]];
[Task resume];
3》颜色随机获取
/**
颜色随机获取
@return 颜色对象
*/
-(UIColor*)colorAcquisition:(float)alpha
CGFloat R,G,B = 0.0;
R = arc4random() % 255 /255.0;
G = arc4random() % 255 /255.0;
B = arc4random() % 255 /255.0;
UIColor * color = [UIColor colorWithRed:R green:G blue:B alpha:alpha];
return color;
4》底层乱线的绘制
/**
绘制背景线条
*/
-(void)drawBackLine:(CGRect)rect
/**
获取上下文
*/
CGContextRef contextRef = UIGraphicsGetCurrentContext();
/**
色值画笔的宽度
*/
CGContextSetLineWidth(contextRef, 1.0f);
/**
获取绘制点
*/
for (unsigned i =0 ; i<8; i++)
/**
获取画笔的颜色
*/
CGContextSetStrokeColorWithColor(contextRef, [self colorAcquisition:0.25f].CGColor);
/**
获取绘制的初始点
*/
float pX = arc4random() % (int)rect.size.width;
float pY = arc4random() % (int)rect.size.height;
/**
移动画笔
*/
CGContextMoveToPoint(contextRef, pX, pY);
float pend_X = arc4random() % (int)rect.size.width;
float pend_Y = arc4random() % (int)rect.size.height;
CGContextAddLineToPoint(contextRef, pend_X, pend_Y);
CGContextStrokePath(contextRef);
5》验证码的绘制
- (void)drawRect:(CGRect)rect
[super drawRect:rect];
/**
计算单个字体的大小
*/
CGSize singleSize = [@"Z" sizeWithAttributes:@NSFontAttributeName:[UIFont systemFontOfSize:15]];
/**
单个字体剩余的宽
*/
CGFloat singleSurplusWeight = rect.size.width / verificationCodeString.length - singleSize.width;
/**
单个字体剩余的宽
*/
CGFloat singleSurplusHeight = rect.size.height - singleSize.height;
/**
获取绘制参数,并开始绘制
*/
float pX ,pY;
for (unsigned i = 0; i<verificationCodeString.length; i++)
/**
随机获取绘制的点
*/
pX = arc4random() % (int)singleSurplusWeight + rect.size.width /verificationCodeString.length* i;
pY = arc4random() % (int)singleSurplusHeight;
/**
获取要绘制的字
*/
unichar objectChar = [verificationCodeString characterAtIndex:i];
NSString * drawStr = [NSString stringWithFormat:@"%c",objectChar];
/**
绘制对象
*/
[drawStr drawAtPoint:CGPointMake(pX, pY) withAttributes:@NSFontAttributeName:[UIFont systemFontOfSize:15],NSForegroundColorAttributeName:[self colorAcquisition:1.0]];
/**
创建文本底线
*/
[self drawBackLine:rect];
5、代码下载
https://pan.baidu.com/s/1pLAYMNL
以上是关于验证码之图像验证码的主要内容,如果未能解决你的问题,请参考以下文章