验证码之图像验证码

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


猜你喜欢

转载自blog.csdn.net/zhoushuangjian511/article/details/70153792