Generar cadena alfanumérica aleatoria en Swift

Resuelto vishnu asked hace 10 años • 26 respuestas

¿Cómo puedo generar una cadena alfanumérica aleatoria en Swift?

vishnu avatar Nov 10 '14 20:11 vishnu
Aceptado

Actualización rápida 4.2

Swift 4.2 introdujo mejoras importantes al tratar con valores y elementos aleatorios. Puede leer más sobre esas mejoras aquí . Aquí está el método reducido a unas pocas líneas:

func randomString(length: Int) -> String {
  let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  return String((0..<length).map{ _ in letters.randomElement()! })
}

Actualización rápida 3.0

func randomString(length: Int) -> String {

    let letters : NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    let len = UInt32(letters.length)

    var randomString = ""

    for _ in 0 ..< length {
        let rand = arc4random_uniform(len)
        var nextChar = letters.character(at: Int(rand))
        randomString += NSString(characters: &nextChar, length: 1) as String
    }

    return randomString
}

Respuesta original:

func randomStringWithLength (len : Int) -> NSString {

    let letters : NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

    var randomString : NSMutableString = NSMutableString(capacity: len)

    for (var i=0; i < len; i++){
        var length = UInt32 (letters.length)
        var rand = arc4random_uniform(length)
        randomString.appendFormat("%C", letters.characterAtIndex(Int(rand)))
    }

    return randomString
}
iAhmed avatar Nov 10 '2014 14:11 iAhmed

Aquí hay una solución lista para usar con una sintaxis más rápida . Simplemente puedes copiarlo y pegarlo:

func randomAlphaNumericString(length: Int) -> String {
    let allowedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    let allowedCharsCount = UInt32(allowedChars.characters.count)
    var randomString = ""

    for _ in 0 ..< length {
        let randomNum = Int(arc4random_uniform(allowedCharsCount))
        let randomIndex = allowedChars.index(allowedChars.startIndex, offsetBy: randomNum)
        let newCharacter = allowedChars[randomIndex]
        randomString += String(newCharacter)
    }

    return randomString
}

Si prefiere un Framework que también tenga algunas funciones más útiles, no dude en consultar mi proyecto HandySwift . También incluye una hermosa solución para cadenas alfanuméricas aleatorias :

String(randomWithLength: 8, allowedCharactersType: .alphaNumeric) // => "2TgM5sUG"
Jeehut avatar Nov 22 '2015 22:11 Jeehut