首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Youtube in类似的短随机唯一字母数字密钥,在Swift中

与Youtube in类似的短随机唯一字母数字密钥,在Swift中
EN

Stack Overflow用户
提问于 2015-07-29 13:07:00
回答 7查看 11.1K关注 0票数 19

是否有一种方法可以创建类似于Swift中的YouTube in的随机唯一in?

我知道这个链接上也有类似的答案,但它们都是针对Php的。但我想要斯威夫特的东西。

我尝试过使用时间戳和UUID,但是我想要一个字母数字短键,它大约是4-10个字符,这样用户就可以很容易地与其他人进行口头共享。

谢谢。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-07-29 13:27:56

寻找唯一的字符串

您可以使用UUID,它们非常酷:

代码语言:javascript
复制
let uuid = NSUUID().UUIDString
print(uuid)

来自文档

UUID(通用唯一标识符),也称为GUID(全局唯一标识符)或IID(接口标识符),是128位值。NSUUID创建的UUID符合RFC 4122版本4,并且使用随机字节创建。

关于uuid标识符的一些信息

寻找更具体的长度

试着做这样的事情:

代码语言:javascript
复制
func randomStringWithLength(len: Int) -> NSString {

    let letters : NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

    let randomString : NSMutableString = NSMutableString(capacity: len)

    for _ in 1...len{
        let length = UInt32 (letters.length)
        let rand = arc4random_uniform(length)
        randomString.appendFormat("%C", letters.character(at: Int(rand)))
    }

    return randomString
}

但我会保留我的答案以防其他人在寻找UUID时偶然发现

票数 23
EN

Stack Overflow用户

发布于 2016-03-15 20:52:08

这将允许您创建一个随机的短代码。它可以创建从十六进制一直到基础62码和不同长度的代码。

是啊。

代码语言:javascript
复制
let myCode = ShortCodeGenerator.getCode(length: 6)

3 dH7t8,fdE7j1,Gl6jKd,Hv8gU3

代码语言:javascript
复制
let myBase32Code = ShortCodeGenerator.getCode(withBase: UInt32(32), length: 6)

3HF75J,J67N9D,B47SO3,L9SD2N

您必须检查冗余,然后创建一个新的,如果它已经被使用。

代码语言:javascript
复制
struct ShortCodeGenerator {

    private static let base62chars = [Character]("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".characters)
    private static let maxBase : UInt32 = 62

    static func getCode(withBase base: UInt32 = maxBase, length: Int) -> String {
        var code = ""
        for _ in 0..<length {
            let random = Int(arc4random_uniform(min(base, maxBase)))
            code.append(base62chars[random])
        }
        return code
    }
}

这个答案在创建上面的代码时很有用,并且有很好的有关每个基号和长度的唯一标识符数目的信息。

您需要的唯一标识符的总数可以由以下公式计算:

唯一ID的BaseNumber^length =#

编辑:

我还添加了更多的功能,将Int和NSDate的代码转换为我自己的项目的短代码,并将它们放到GitHub上的项目中。

票数 11
EN

Stack Overflow用户

发布于 2017-09-23 07:00:29

更新为swift 3:

如果要生成短的随机唯一字母数字密钥,请使用下面的代码行;

//职能定义:

代码语言:javascript
复制
func generateTransactionId(length: Int) -> String {
    var result = ""
    let base62chars = [Character]("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".characters)
    let maxBase : UInt32 = 62
    let minBase : UInt16 = 32

    for _ in 0..<length {
        let random = Int(arc4random_uniform(UInt32(min(minBase, UInt16(maxBase)))))
        result.append(base62chars[random])
    }
    return result
}

//函数调用:

代码语言:javascript
复制
let mTranactionId = self.generateTransactionId(length: 5) // you can change the value of length as you want
print("mTranactionId: \(mTranactionId)")

Ex:结果如下: XHA7K,QTC92,MS1PT,YE2PV

//享受编码.!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31701326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档