[string] Swift에서 임의의 영숫자 문자열 생성

Swift에서 임의의 영숫자 문자열을 어떻게 생성 할 수 있습니까?



답변

스위프트 4.2 업데이트

Swift 4.2는 임의의 값과 요소를 처리 할 때 크게 개선되었습니다. 당신은 할 수 있습니다 여기 개선에 대한 자세한 내용 . 다음은 몇 줄로 축소 된 방법입니다.

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

스위프트 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
}

원래 답변 :

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
}


답변

다음 은 Swiftier 구문에서 바로 사용할 수있는 솔루션 입니다 . 간단히 복사하여 붙여 넣을 수 있습니다.

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
}

좀 더 편리한 기능을 가진 프레임 워크 를 선호한다면 내 프로젝트 HandySwift를 자유롭게 확인하십시오 . 또한 임의의 영숫자 문자열에 대한 아름다운 솔루션이 포함되어 있습니다 .

String(randomWithLength: 8, allowedCharactersType: .alphaNumeric) // => "2TgM5sUG"


답변

다음과 같은 방법으로도 사용할 수 있습니다.

extension String {

    static func random(length: Int = 20) -> String {

        let base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
        var randomString: String = ""

        for _ in 0..<length {

            let randomValue = arc4random_uniform(UInt32(base.characters.count))
            randomString += "\(base[base.startIndex.advancedBy(Int(randomValue))])"
        }

        return randomString
    }
}

간단한 사용법 :

let randomString = String.random()

스위프트 3 구문 :

extension String {

    static func random(length: Int = 20) -> String {
        let base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
        var randomString: String = ""

        for _ in 0..<length {
            let randomValue = arc4random_uniform(UInt32(base.characters.count))
            randomString += "\(base[base.index(base.startIndex, offsetBy: Int(randomValue))])"
        }
        return randomString
    }
}

스위프트 4 구문 :

extension String {

    static func random(length: Int = 20) -> String {
        let base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
        var randomString: String = ""

        for _ in 0..<length {
            let randomValue = arc4random_uniform(UInt32(base.count))
            randomString += "\(base[base.index(base.startIndex, offsetBy: Int(randomValue))])"
        }
        return randomString
    }
}


답변

빠른:

let randomString = NSUUID().uuidString


답변

2019 년 업데이트

특이한 경우에는

성능 문제.

다음은 캐시 하는 매우 명확한 기능입니다 .

func randomNameString(length: Int = 7)->String{

    enum s {
        static let c = Array("abcdefghjklmnpqrstuvwxyz12345789")
        static let k = UInt32(c.count)
    }

    var result = [Character](repeating: "-", count: length)

    for i in 0..<length {
        let r = Int(arc4random_uniform(s.k))
        result[i] = s.c[r]
    }

    return String(result)
}

이것은 당신이 알려진 고정 된 경우입니다 문자 집합을.

편리한 팁 :

“abcdefghjklmnpqrstuvwxyz12345789″는 ‘나쁜’문자를 피합니다.

인간이 종종 혼동하는 문자는 0, o, O, i 등이 없습니다.

이는 종종 사람 고객이 사용할 예약 코드 및 유사한 코드에 대해 수행됩니다.


답변

간단하고 빠른. UUID () uuidString

// UUID에서 생성 된 문자열 (예 : “E621E1F8-C36C-495A-93FC-0C247A3E6E5F”)을 반환합니다.

공용 var uuidString : 문자열 {get}

https://developer.apple.com/documentation/foundation/uuid

스위프트 3.0

let randomString = UUID().uuidString //0548CD07-7E2B-412B-AD69-5B2364644433
print(randomString.replacingOccurrences(of: "-", with: ""))
//0548CD077E2B412BAD695B2364644433

편집하다

하지 혼동 마십시오 UIDevice.current.identifierForVendor?.uuidString임의의 값을 제공하지 않습니다 그것.


답변

함께 스위프트 4.2 당신의 가장 좋은 방법은 당신이 원하는 문자가 포함 된 문자열을 생성하고 사용하는 것입니다 randomElement를 각 문자를 선택하기 :

let length = 32
let characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
let randomCharacters = (0..<length).map{_ in characters.randomElement()!}
let randomString = String(randomCharacters)

이러한 변경 사항에 대한 자세한 내용은 여기를 참조하십시오 .