这一章的密码生成器涉及到宏定义,随机数random、srandom,NSRange,StringWithRange.
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;
}