CC论坛

 找回密码
 立即注册
查看: 638|回复: 0

[通用] Swift/Objective-C高效生成随机字符串

[复制链接]

56

主题

57

帖子

339

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
339
发表于 2020-2-18 22:15:52 | 显示全部楼层 |阅读模式

Objective-C版

  1. // 随机生成字符串(由大小写字母、数字组成)
  2. + (NSString *)random: (int)len {
  3.    
  4.     char ch[len];
  5.     for (int index=0; index<len; index++) {
  6.         
  7.         int num = arc4random_uniform(75)+48;
  8.         if (num>57 && num<65) { num = num%57+48; }
  9.         else if (num>90 && num<97) { num = num%90+65; }
  10.         ch[index] = num;
  11.     }
  12.    
  13.     return [[NSString alloc] initWithBytes:ch length:len encoding:NSUTF8StringEncoding];
  14. }
  15. // 随机生成字符串(由大小写字母组成)
  16. + (NSString *)randomNoNumber: (int)len {
  17.    
  18.     char ch[len];
  19.     for (int index=0; index<len; index++) {
  20.         
  21.         int num = arc4random_uniform(58)+65;
  22.         if (num>90 && num<97) { num = num%90+65; }
  23.         ch[index] = num;
  24.     }
  25.    
  26.     return [[NSString alloc] initWithBytes:ch length:len encoding:NSUTF8StringEncoding];
  27. }
复制代码

Swift版

  1. extension String {
  2.    
  3.     /// 生成随机字符串
  4.     ///
  5.     /// - Parameters:
  6.     ///   - count: 生成字符串长度
  7.     ///   - isLetter: false=大小写字母和数字组成,true=大小写字母组成,默认为false
  8.     /// - Returns: String
  9.     static func random(_ count: Int, _ isLetter: Bool = false) -> String {
  10.         
  11.         var ch: [CChar] = Array(repeating: 0, count: count)
  12.         for index in 0..<count {
  13.             
  14.             var num = isLetter ? arc4random_uniform(58)+65:arc4random_uniform(75)+48
  15.             if num>57 && num<65 && isLetter==false { num = num%57+48 }
  16.             else if num>90 && num<97 { num = num%90+65 }
  17.             
  18.             ch[index] = CChar(num)
  19.         }
  20.         
  21.         return String(cString: ch)
  22.     }
  23. }
复制代码

使用

  1. /// 大小写字母和数字组成
  2. let string1 = String.random(100)
  3. /// 大小写字母组成
  4. let string2 = String.random(100, true)
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|粤ICP备19105948号|CC论坛

GMT+8, 2022-8-13 14:27

快速回复 返回顶部 返回列表