首页 > ios > ios03_随机密码生成类

ios03_随机密码生成类

  最近做了一个密码生成器,就是能自动的生成密码,说一下自己设置的要求:
  1.密码总共可以选择包含大写字母、小写字母、数字和特殊字符四种字符。
  2.可以用户确定输入的位数
  3.保证当用户输入的密码位数小于用户选择的字符种类数时,密码的种类不能重复。如果用户选择4种字符类型,但是要求的位数是3位,那么输出的密码,字符的种类不能重复。
  遇到的重难点:
  1.要求3的实现,原来用的是switch,但是这是一个很错误的想法,switch的嵌套switch,写的很乱,最后想到了一种解决方法。用for循环+标记法来实现,OK!
  2.随机问题,原来我用的是C语言种的种子随机,结果发现,产生的密码是以秒为单位的,一秒之内的密码都一样,我就用了OC中的arc4random进行随机,也不需要种种子,比较爽!

  头文件如下:

#import <Foundation/Foundation.h>


@interface PWCreate : NSObject {

}

-(char)charAtIndex:(int)index;
-(unsigned int)randMaked;
-(char)upper;
-(char)lower;
-(char)number;
-(char)special;
-(NSString*)Creat:(int)switchSum:(int)count;
@end

实现代码:

#import "PWCreate.h"


@implementation PWCreate
-(unsigned int)randMaked
{
	return arc4random();
}
-(char)upper
{	
	return 65 + [self randMaked] % 26;
}
-(char)lower
{
	return 97+[self randMaked]%26;
}
-(char)number
{
	return 48+[self randMaked]%10;
}
-(char)special;
{
	char a[]="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
	return a[[self randMaked]%32];
}
-(char)charAtIndex:(int)index
{
	switch (index) {
		case 0:
			return [self upper];
			break;
		case 1:
			return [self lower];
			break;
		case 2:
			return [self number];
			break;
		case 3:
			return [self special];
			break;
	}
}
-(NSString*)Creat:(int)switchSum:(int)count
{
	int location,i,j; //记录随机的位置用
	BOOL flag[4]={0,0,0,0}; //标记位置是否用
	int switchSumFlaged=0;   //判断是否和switchSum一样
	BOOL flagAll = NO;   //是否每个选择过的值都有值
	char ch;
	NSMutableString* str=[[NSMutableString alloc] initWithCapacity:10];
	for(i=0,j=0;j<count;i++)
	{
		if (flagAll) {
			location=[self randMaked]%4;
			if((1<<location) & switchSum)
			{
				ch=[self charAtIndex:location];
				//printf("1.%c\n",ch);
				[str appendFormat:@"%c",ch];
				j++;
			}
		}
		else {
			location=[self randMaked]%4;
			if(((1<<location)&switchSum) && !flag[location])
			{
				flag[location]=YES;
				switchSumFlaged += (1<<location);
				if (switchSum == switchSumFlaged) {
					flagAll = YES;
				}
				ch=[self charAtIndex:location];
				//printf("2.%c\n",ch);
				[str appendFormat:@"%c",ch];
				j++;
			}
		}
	}
	NSString* s2=[NSString stringWithString:str];
	[str release];
	return s2;
}
@end
  1. Asep 9月 2nd, 2012 @ 01:45 | #1

    Four score and seven minutes ago, I read a sweet atricle. Lol thanks

评论提交中, 请稍候...

留言


可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks