随机内容字符串

前言

我们再平时开发过程中,可能需要一些随机内容的字符串用于测试,例如:任意长度的内容字符串,测试我们的tableView的cell的高度自适应,这类测试有利于发现一些隐藏的bug。

正文

1.随机长度的字符串

比较简单的做法是,有一个固定的字符串,我们去取其随机长度的子串。

1
2
NSString *str = @"测试字符串";
NSString *randomStr = [str substringToIndex:arc4random_uniform((uint32_t)(str.length))];

2.利用CCRandomGenerateBytes生成随机字符串

这个方法参考这里:ios CCRandomGenerateBytes 生成定长随机字符串
可以生成任意长度的,随机的字母和数字组合的字符串,他本质是用作生成随机密钥的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//利用CCRandomGenerateBytes生成随机字符串
+ (NSString *)jxt_randomStringWithLength:(size_t)length
{
if (length < 1) {
return nil;
}

length = length*0.5;
unsigned char digest[length];
CCRNGStatus status = CCRandomGenerateBytes(digest, length);
if (status == kCCSuccess) {
return [self private_jxt_stringFrom:digest length:length];
}
return nil;
}

//将bytes转为字符串
+ (NSString *)private_jxt_stringFrom:(unsigned char *)digest length:(size_t)length
{
NSMutableString *string = [NSMutableString string];
for (int i = 0; i < length; i++) {
[string appendFormat:@"%02x",digest[i]];
}
return string;
}

3.指定位数随机数的生成

这个一般用于验证码等随机密码的业务场合,常用的是生成4位或6位的随机数组合:

1
2
3
4
//6位随机数
[NSString stringWithFormat:@"%06d", arc4random() % 1000000];
//4位随机数
[NSString stringWithFormat:@"%04d", arc4random() % 10000];

上述的算法比较简单,但是当我们需要长度更大的随机数字时,这个算法就有局限了,因为arc4random()的取值范围是0~4294967295,针对这个问题,我们可以改进一下:

1
2
3
4
5
6
7
8
+ (NSString *)jxt_randomDigitsStringWithLength:(NSUInteger)length
{
NSString *randomDigits = @"";
for (int i = 0; i < length; i ++) {
randomDigits = [randomDigits stringByAppendingFormat:@"%d", (arc4random() % 10)];
}
return randomDigits;
}

当然上述算法在性能上是比不上先前的两个的,所以要根据需求取舍。

Demo详见:RandomStringForTest

参考

ios CCRandomGenerateBytes 生成定长随机字符串


本文作者:霖溦
本文链接:https://kukumalucn.github.io/blog/2018/08/13/随机内容字符串/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!

坚持原创技术分享,您的支持将鼓励我继续创作!