Подтвердить что ты не робот

Короткие случайные уникальные буквенно-цифровые клавиши, похожие на идентификаторы Youtube, в Swift

Есть ли способ создать случайные уникальные идентификаторы, похожие на идентификаторы YouTube в Swift?

Я знаю, что есть похожие ответы на эту ссылку , но они предназначены для Php. Но я хочу что-то в Свифт.

Я пробовал использовать timestamp и UUID, но мне нужны буквенно-цифровые короткие клавиши, которые будут составлять около 4-10 символов, чтобы пользователи могли легко поделиться с другими в устной форме.

Спасибо.

4b9b3361

Ответ 1

Искать только уникальную строку

Вы можете использовать UUID, они довольно круты:

let uuid = NSUUID().UUIDString
print(uuid)

Из  docs

UUID (универсально уникальные идентификаторы), также известные как GUID (глобально) Уникальные идентификаторы) или IID (интерфейсные идентификаторы), являются 128-битными значения. UUID, созданные NSUUID, соответствуют 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

Ответ 2

Это позволит вам создать случайный короткий код. Он может создавать коды с шестнадцатеричного кода вплоть до базовых 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
    }
}

Этот ответ был полезен при создании вышеуказанного кода, а также был полезен информацию о количестве уникальных идентификаторов, которые вы можете иметь с каждым базовым номером и длиной.

Общее количество уникальных идентификаторов, которые вам нужны, можно вычислить по уравнению:

BaseNumber ^ length = # уникальных идентификаторов

EDIT:

Я добавил еще больше возможностей для преобразования Int и NSDate в короткие коды для моего собственного проекта, а также поместил их в проект на GitHub.

Ответ 3

Выполняет ли NSUUID().UUIDString то, что вам нужно?

Ответ 4

Обновлено для быстрого 3:

Если вы хотите генерировать короткие случайные уникальные буквенно-цифровые клавиши, используемые ниже строк кодов,

//функция defination:

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

//Наслаждайтесь кодированием...!