iOS生成本地随机验证码

时间:2021-10-10 12:34:32

原文链接:http://www.cnblogs.com/jerehedu/p/4527707.html

效果图:

aaarticlea/png;base64,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" alt="" />

CaptchaView.h

@interface CaptchaView : UIView

@property (nonatomic, retain) NSArray *changeArray; //字符素材数组
@property (nonatomic, retain) NSMutableString *changeString; //验证码的字符串

CaptchaView.m

#import "CaptchaView.h"

#define kRandomColor  [UIColor colorWithRed:arc4random() % 256 / 256.0 green:arc4random() % 256 / 256.0 blue:arc4random() % 256 / 256.0 alpha:1.0];
#define kLineCount 6
#define kLineWidth 1.0
#define kCharCount 4
#define kFontSize [UIFont systemFontOfSize:arc4random() % 5 + 15] @implementation CaptchaView
@synthesize changeString,changeArray; - (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) { self.layer.cornerRadius = 5.0; //设置layer圆角半径
self.layer.masksToBounds = YES; //隐藏边界
self.backgroundColor = kRandomColor; //显示一个随机验证码
[self changeCaptcha];
} return self;
}
#pragma mark 更换验证码,得到更换的验证码的字符串
-(void)changeCaptcha
{
//<一>从字符数组中随机抽取相应数量的字符,组成验证码字符串
//数组中存放的是全部可选的字符,可以是字母,也可以是中文
self.changeArray = [[NSArray alloc] initWithObjects:@"",@"",@"",@"",@"",@"",@"",@"",@"",@"",@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",@"a",@"b",@"c",@"d",@"e",@"f",@"g",@"h",@"i",@"j",@"k",@"l",@"m",@"n",@"o",@"p",@"q",@"r",@"s",@"t",@"u",@"v",@"w",@"x",@"y",@"z",nil]; //如果能确定最大需要的容量,使用initWithCapacity:来设置,好处是当元素个数不超过容量时,添加元素不需要重新分配内存
NSMutableString *getStr = [[NSMutableString alloc] initWithCapacity:kCharCount];
self.changeString = [[NSMutableString alloc] initWithCapacity:kCharCount]; //随机从数组中选取需要个数的字符,然后拼接为一个字符串
for(int i = ; i < kCharCount; i++)
{
NSInteger index = arc4random() % ([self.changeArray count] - );
getStr = [self.changeArray objectAtIndex:index]; self.changeString = (NSMutableString *)[self.changeString stringByAppendingString:getStr];
} //<2>从网络获取字符串,然后把得到的字符串在本地绘制出来(网络获取步骤在这省略) } #pragma mark 点击view时调用,因为当前类自身就是UIView,点击更换验证码可以直接写到这个方法中,不用再额外添加手势
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//点击界面,切换验证码
[self changeCaptcha]; //setNeedsDisplay调用drawRect方法来实现view的绘制
[self setNeedsDisplay];
} #pragma mark 绘制界面(1.UIView初始化后自动调用; 2.调用setNeedsDisplay方法时会自动调用)
- (void)drawRect:(CGRect)rect {
// 重写父类方法,首先要调用父类的方法
[super drawRect:rect]; //设置随机背景颜色
self.backgroundColor = kRandomColor; //获得要显示验证码字符串,根据长度,计算每个字符显示的大概位置
NSString *text = [NSString stringWithFormat:@"%@",self.changeString];
CGSize cSize = [@"S" sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:]}];
int width = rect.size.width / text.length - cSize.width;
int height = rect.size.height - cSize.height;
CGPoint point; //依次绘制每一个字符,可以设置显示的每个字符的字体大小、颜色、样式等
float pX, pY;
for (int i = ; i < text.length; i++)
{
pX = arc4random() % width + rect.size.width / text.length * i;
pY = arc4random() % height;
point = CGPointMake(pX, pY);
unichar c = [text characterAtIndex:i];
NSString *textC = [NSString stringWithFormat:@"%C", c]; [textC drawAtPoint:point withAttributes:@{NSFontAttributeName:kFontSize}];
} //调用drawRect:之前,系统会向栈中压入一个CGContextRef,调用UIGraphicsGetCurrentContext()会取栈顶的CGContextRef
CGContextRef context = UIGraphicsGetCurrentContext();
//设置画线宽度
CGContextSetLineWidth(context, kLineWidth); //绘制干扰的彩色直线
for(int i = ; i < kLineCount; i++)
{
//设置线的随机颜色
UIColor *color = kRandomColor;
CGContextSetStrokeColorWithColor(context, [color CGColor]);
//设置线的起点
pX = arc4random() % (int)rect.size.width;
pY = arc4random() % (int)rect.size.height;
CGContextMoveToPoint(context, pX, pY);
//设置线终点
pX = arc4random() % (int)rect.size.width;
pY = arc4random() % (int)rect.size.height;
CGContextAddLineToPoint(context, pX, pY);
//画线
CGContextStrokePath(context);
}
} @end