《30天精通iPhone手机编程》-Day9-密码生成器

      这一章的密码生成器涉及到宏定义,随机数random、srandom,NSRange,StringWithRange.

     random为伪随机srandom为随机种子,使用srandom()函数赋随机数种子值。然后再使用random来产生随机数
     随机种子是用来产生随机数的。如果不用SRandom设定种子数,Random会使用当前系统运行过的毫秒数(?)作为随机种子。
     
Random就是通过对种子数进行一系列复杂的运算计算出随机数的。
      这一系列复杂的运算,你可以理解为“计算种子数的k次方,将结果的第n-m位作为下一次迭代的种子,重复计算k次之后,取当前鼠标的xy坐标,将x减去y,取其绝对值z,将运算结果的k到z位作为返回值,并将此返回值作为下一次计算随机数的种子”。

#define RANDOM_SEED() srandom(time(NULL))
//定义随机整数值,使用MIN,MAX和random计算返回的整数值为min+(random/((max+1)-min))
#define RANDOM_INT(__MIN__, __MAX__) ((__MIN__) + random() % ((__MAX__+1) - (__MIN__)))
//文本框控件输入返回判定方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField {	
	if (textField == password) {
		[password resignFirstResponder];
	}	
	if (textField == passwordlength) {
		[passwordlength resignFirstResponder];
	}	
	return YES;
}
- (IBAction)setPassword{
	//获取输入密码的长度整数
	NSInteger iPassswordLength = [passwordlength.text intValue];
	//创建判定逻辑对象,密码中字母小写生成的开关控件的属性值为打开
	BOOL bIncludeLowerCase = includeLowerCase.on;
	//创建判定逻辑对象,密码中字母大写生成的开关控件的属性值为打开
	BOOL bIncludeUpperCase = includeUpperCase.on;
	//创建判定逻辑对象,密码中数字生成的开关控件的属性值为打开
	BOOL bIncludeNumbers = includeNumbers.on;
	//密码文字定义为空
	NSString* passwordText = @"";	
	NSString* lowercaseChars = @"abcdefghijklmnopqrstuvwxyz";	
	NSString* uppercaseChars = @"ABCDEFGHIJKLMNOPQRSTUVWXYZ";	
	NSString* numbersChars = @"0123456789";
	//使用宏定义中的随机变量
	RANDOM_SEED();	
	NSString* passwordChars = @"";	
	if(bIncludeLowerCase)
        //获取小写字母字符,获取的数据转换为文字格式
		passwordChars = [NSString stringWithFormat:@"%@%@", passwordChars, lowercaseChars];
	if(bIncludeUpperCase)
		passwordChars = [NSString stringWithFormat:@"%@%@", passwordChars, uppercaseChars];	
	if(bIncludeNumbers)
		passwordChars = [NSString stringWithFormat:@"%@%@", passwordChars, numbersChars];
	//数值从0开始,当数值小于密码长度时,数值加1循环
	for(NSInteger i=0; i<iPassswordLength; i++) {
		//数值为宏定义中获取从0到密码字符长度-1,返回的整数值为min+(random/((max+1)-min))
		int index = RANDOM_INT(0, [passwordChars length]-1);
		//NSRange定义起始位置和所需的元素数量,创建范围变量对象,其中index为起始的位置,1为字符的数量,获取一个字符特征值
		NSRange range = NSMakeRange(index, 1);
        //创建密码中单个字符的字符变量对象,文字位置和数量为范围变量对象
		NSString *passwordChar = [passwordChars substringWithRange:range];	
		//在密码字符变量获取数据转换为文字格式
		passwordText = [NSString stringWithFormat:@"%@%@", passwordText, passwordChar];		
	}
	//密码变量定义为空
	password.text = @"";
	//密码变量的文字替换为passwordText
	password.text = passwordText;
	
}

《30天精通iPhone手机编程》-Day9-密码生成器_第1张图片

你可能感兴趣的:(编程,null,iPhone,Random,手机)