Generate random alphanumeric string in Swift

前端 未结 22 983
暖寄归人
暖寄归人 2020-11-27 09:51

How can I generate a random alphanumeric string in Swift?

22条回答
  •  南笙
    南笙 (楼主)
    2020-11-27 09:59

    Loop free, though it is limited to 43 characters. If you need more, it can be modified. This approach has two advantages over solely using a UUID:

    1. Greater Entropy by using lower case letters, as UUID() only generates upper case letters
    2. A UUID is at most 36 characters long (including the 4 hyphens), but only 32 characters long without. Should you need something longer, or not want hyphens included, the use of the base64EncodedString handles this

    Also, this function makes use of a UInt to avoid negative numbers.

     func generateRandom(size: UInt) -> String {
            let prefixSize = Int(min(size, 43))
            let uuidString = UUID().uuidString.replacingOccurrences(of: "-", with: "")
            return String(Data(uuidString.utf8)
                .base64EncodedString()
                .replacingOccurrences(of: "=", with: "")
                .prefix(prefixSize))
        }
    

    Calling it in a loop to check output:

    for _ in 0...10 {
        print(generateRandom(size: 32))
    }
    

    Which produces:

    Nzk3NjgzMTdBQ0FBNDFCNzk2MDRENzZF
    MUI5RURDQzE1RTdCNDA3RDg2MTI4QkQx
    M0I3MjJBRjVFRTYyNDFCNkI5OUM1RUVC
    RDA1RDZGQ0IzQjI1NDdGREI3NDgxM0Mx
    NjcyNUQyOThCNzhCNEVFQTk1RTQ3NTIy
    MDkwRTQ0RjFENUFGNEFDOTgyQTUxODI0
    RDU2OTNBOUJGMDE4NDhEODlCNEQ1NjZG
    RjM2MTUxRjM4RkY3NDU2OUFDOTI0Nzkz
    QzUwOTE1N0U1RDVENDE4OEE5NTM2Rjcy
    Nzk4QkMxNUJEMjYwNDJDQjhBQkY5QkY5
    ODhFNjU0MDVEMUI2NEI5QUIyNjNCNkVF
    

提交回复
热议问题