War*_*ard 141 string random cocoa alphanumeric objective-c
我想调用一个方法,传递它的长度并让它生成一个随机的字母数字字符串.
是否有任何实用程序库可能有一堆这些类型的函数?
Jef*_*f B 309
这是一个快速而肮脏的实现.尚未经过测试.
NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
-(NSString *) randomStringWithLength: (int) len {
NSMutableString *randomString = [NSMutableString stringWithCapacity: len];
for (int i=0; i<len; i++) {
[randomString appendFormat: @"%C", [letters characterAtIndex: arc4random_uniform([letters length])]];
}
return randomString;
}
Run Code Online (Sandbox Code Playgroud)
小智 103
不完全是你问的,但仍然有用:
[[NSProcessInfo processInfo] globallyUniqueString]
Run Code Online (Sandbox Code Playgroud)
样本输出:
450FEA63-2286-4B49-8ACC-9822C7D4356B-1376-00000239A4AC4FD5
Run Code Online (Sandbox Code Playgroud)
Mel*_*vin 67
NSString *alphabet = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789";
NSMutableString *s = [NSMutableString stringWithCapacity:20];
for (NSUInteger i = 0U; i < 20; i++) {
u_int32_t r = arc4random() % [alphabet length];
unichar c = [alphabet characterAtIndex:r];
[s appendFormat:@"%C", c];
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*ato 43
当然你可以缩短它:
+(NSString*)generateRandomString:(int)num {
NSMutableString* string = [NSMutableString stringWithCapacity:num];
for (int i = 0; i < num; i++) {
[string appendFormat:@"%C", (unichar)('a' + arc4random_uniform(26))];
}
return string;
}
Run Code Online (Sandbox Code Playgroud)
Abh*_*ert 26
如果您愿意仅限于十六进制字符,那么最简单的选择是生成一个UUID:
NSString *uuid = [NSUUID UUID].UUIDString;
Run Code Online (Sandbox Code Playgroud)
示例输出:16E3DF0B-87B3-4162-A1A1-E03DB2F59654.
如果你想要一个较小的随机字符串,那么你只需要获取前8个字符.
这是一个版本4 UUID这意味着第三和第四组中的第一个字符不是随机的(它们将始终是4和之一8,9,A或B).
字符串中的每个其他字符都是完全随机的,您可以在数百年内每秒生成数百万个UUID,而不会产生两次生成相同UUID的风险.
kei*_*yip 24
Jeff B答案的类别版本.
的NSString + Random.h
#import <Foundation/Foundation.h>
@interface NSString (Random)
+ (NSString *)randomAlphanumericStringWithLength:(NSInteger)length;
@end
Run Code Online (Sandbox Code Playgroud)
的NSString + Random.m
#import "NSString+Random.h"
@implementation NSString (Random)
+ (NSString *)randomAlphanumericStringWithLength:(NSInteger)length
{
NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
NSMutableString *randomString = [NSMutableString stringWithCapacity:length];
for (int i = 0; i < length; i++) {
[randomString appendFormat:@"%C", [letters characterAtIndex:arc4random() % [letters length]]];
}
return randomString;
}
@end
Run Code Online (Sandbox Code Playgroud)
迅速
func randomStringWithLength(length: Int) -> String {
let alphabet = "-_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
let upperBound = UInt32(count(alphabet))
return String((0..<length).map { _ -> Character in
return alphabet[advance(alphabet.startIndex, Int(arc4random_uniform(upperBound)))]
})
}
Run Code Online (Sandbox Code Playgroud)