有没有办法在Swift中创建类似于YouTube ID的随机唯一ID?
我知道这个link有类似的答案,但它们是针对Php的。但是我想要一些Swift中的东西。
我曾尝试使用时间戳和UUID,但我想要一个字母数字的短按键,大约4到10个字符,这样用户就可以轻松地与他人口头分享。
感谢。
答案 0 :(得分:18)
您可以使用UUID这些非常酷:
let uuid = NSUUID().UUIDString
print(uuid)
来自 docs
UUID(通用唯一标识符),也称为GUID(全球唯一标识符) 唯一标识符)或IID(接口标识符)是128位 值。 NSUUID创建的UUID符合RFC 4122第4版 用随机字节创建。
有关uuid的一些信息:https://en.wikipedia.org/wiki/Universally_unique_identifier
尝试这样的事情:
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
答案 1 :(得分:8)
这将允许您创建随机短代码。它可以从十六进制创建代码,一直到62个代码和不同长度。
又名。
let myCode = ShortCodeGenerator.getCode(length: 6)
3dH7t8, fdE7j1, Gl6jKd, Hv8gU3,
let myBase32Code = ShortCodeGenerator.getCode(withBase: UInt32(32), length: 6)
3HF75J, J67N9D, B47SO3, L9SD2N
您必须检查冗余,然后创建一个新的,如果已经使用过。
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
}
}
这个答案在创建上面的代码时很有用,也很好 information on the number of unique identifiers you can have with each base number and length.
您需要的唯一标识符总数可以通过以下公式计算:
BaseNumber ^ length =唯一ID数量
编辑:
答案 2 :(得分:4)
<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var array = [0,40,80,120,160];
var height = 150;
var width = 300;
for (i = 0; i < array.length; i++)
{
ctx.beginPath();
ctx.moveTo(array[i],height);
ctx.lineTo(((width*0.075) + array[i]),0);
ctx.lineTo(((width*0.15 + array[i])),(height));
ctx.closePath();
ctx.fill();
}
</script>
</body>
</html>
能做你需要的吗?
答案 3 :(得分:3)
更新了swift 3:
如果要生成短随机唯一字母数字键,请在下面的代码行中使用;
//功能定义:
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
}
//函数调用:
let mTranactionId = self.generateTransactionId(length: 5) // you can change the value of length as you want
print("mTranactionId: \(mTranactionId)")
Ex:结果如下:XHA7K,QTC92,MS1PT,YE2PV
//享受编码......!
答案 4 :(得分:0)
快速自定义替代项(这些版本不检查重复的字符):
func randomString(length: Int) -> String {
let letters = Array("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
var randomString: String = ""
for _ in 0..<length {
let randomNumber = Int.random(in: 0..<letters.count)
randomString.append(letters[randomNumber])
}
return randomString
}
答案 5 :(得分:0)
我对 NanoID 非常满意。
...这是 SWIFT 版本:
https://github.com/antiflasher/NanoID
您只需将 1 个文件 (NanoID.swift) 拖到您的项目中,就可以了!
标签:短 GUID、短 UUID、短唯一 ID、Swift、iOS
答案 6 :(得分:0)
您只需使用 UUID
即可存档。
如果您不想要整个字符串,如 Swift 中的任何 String
,您可以使用 range 选择字符串的一小部分,如下所示:
let text = UUID().uuidString
let index = text.index(text.startIndex, offsetBy: 8)
let small = text[text.startIndex..<index]
注意 8
是我建议的字符串长度,例如,您可以通过使用 min(size, text.count)
限制此值来改进这一点。
最后,small
是一个 Substring
,将它投射到 String
就像往常一样 - String(small)