সুইফটে এলোমেলোভাবে স্ট্রিম তৈরি করুন


208

আমি কীভাবে সুইফটে এলোমেলিক স্ট্রিং তৈরি করতে পারি?

উত্তর:


355

সুইফট 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
}

1
উত্পন্ন বর্ণানুক্রমিক স্ট্রিংটি কেবল 6 বা 8 টি অক্ষরের দীর্ঘ কিনা তা নিশ্চিত করার জন্য আমি কি উপরোক্ত সংশোধন করতে পারি?
ksa_coder

4
এলোমেলো স্ট্রিং (দৈর্ঘ্য: 6) বা র্যান্ডমস্ট্রিং (দৈর্ঘ্য: 8)
সাইমন এইচ

58

সুইফিয়ার সিনট্যাক্সে এখানে ব্যবহারের জন্য প্রস্তুত সমাধান । আপনি কেবল এটি অনুলিপি এবং পেস্ট করতে পারেন:

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
}

আপনি যদি এমন কোনও ফ্রেমওয়ার্ক পছন্দ করেন যাতে আরও কিছু সুবিধাজনক বৈশিষ্ট্য রয়েছে তবে আমার প্রজেক্ট হ্যান্ডি সুইফ্টটি চেক আউট করতে নির্দ্বিধায়এলোমেলোভাবে বর্ণমালা সংক্রান্ত স্ট্রিংগুলির জন্য এটি একটি সুন্দর সমাধানও অন্তর্ভুক্ত করে :

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

49

আপনি এটি নিম্নলিখিত উপায়ে ব্যবহার করতে পারেন:

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
    }
}

29

সুইফট:

let randomString = NSUUID().uuidString

ইউআইডি ()। Uuid স্ট্রিং এখন
মার্ক ব্রিজ

2
ইউইউডি মাঝে মাঝে একই স্ট্রিং দেয়!
বুড়াক üztürk

2
বিভিন্ন ধরণের ইউআইডি রয়েছে, এর মধ্যে কয়েকটি সময় ভিত্তিক। সুইফট ফাউন্ডেশনে ব্যবহৃত একটি হ'ল ভি 4, এলোমেলো । খুব কম সম্ভাবনা রয়েছে (যেমন, অবিশ্বাস্যভাবে সামান্য যে একই ইউআইডি দু'বার উত্পন্ন হবে
রবিন ডগের্টি

11

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)
}

এটি যখন আপনার জন্য একটি নির্দিষ্ট, পরিচিত অক্ষর সেট থাকে for

সহজ টিপস:

নোট করুন যে "abcdefghjklmnpqrstuvwxyz12345789" 'খারাপ' চরিত্রগুলি এড়িয়ে চলে

0, o, O, i, ইত্যাদি নেই ... মানুষ প্রায়শই বিভ্রান্ত করে।

এটি প্রায়শই কোডগুলি এবং অনুরূপ কোডগুলি বুকিংয়ের জন্য করা হয় যা মানব গ্রাহকরা ব্যবহার করবেন।


1
জন্য উত্সাহী repeating:count:
সিউর

10

সরল এবং দ্রুত - ইউআইডি ()। ইউইউডিস্ট্রিং

// ইউইউডি থেকে তৈরি স্ট্রিং যেমন "E621E1F8-C36C-495A-93FC-0C247A3E6E5F" ফিরিয়ে দেয়

পাবলিক ভার uuid স্ট্রিং: স্ট্রিং {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র্যান্ডম মান দেবে না এটা।


10

সঙ্গে সুইফট 4.2 আপনার সেরা বাজি আপনি যে অক্ষরগুলি চান একটি স্ট্রিং তৈরি করতে এবং তারপর ব্যবহার করা হয় randomElement প্রতিটি অক্ষর বাছাই:

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

আমি এখানে এই পরিবর্তনগুলি সম্পর্কে আরও বিশদ ।


3
মানচিত্রের পরিবর্তে আপনি কমপ্যাক্টম্যাপ ব্যবহার করতে পারেন এবং তার পরে কোনও প্রয়োজন নেই! অপারেটর. ;)
ক্রিস্টাপস গ্রিনবার্গস

1
আরে @ ক্রিস্টাপস গ্রিনবার্গস! আমার ধারণা ছিল যে জোর করে আন-র্যাপিংয়ের ক্ষেত্রে কমপ্যাক্টম্যাপ ব্যবহারের চেয়ে ভাল পারফরম্যান্স হবে।
লিগডিয়ন

6

সুইফট ২.২ সংস্করণ

// based on https://gist.github.com/samuel-mellert/20b3c99dec168255a046
// which is based on https://gist.github.com/szhernovoy/276e69eb90a0de84dd90
// Updated to work on Swift 2.2

func randomString(length: Int) -> String {
    let charactersString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    let charactersArray : [Character] = Array(charactersString.characters)

    var string = ""
    for _ in 0..<length {
        string.append(charactersArray[Int(arc4random()) % charactersArray.count])
    }

    return string
}

মূলত এই পদ্ধতিটি কল করুন যা ফাংশনটির হাতে দেওয়া পূর্ণসংখ্যার দৈর্ঘ্যের এলোমেলো স্ট্রিং উত্পন্ন করবে। সম্ভাব্য অক্ষর পরিবর্তন করতে কেবল অক্ষর স্ট্রিংয়ের সম্পাদনা করুন। ইউনিকোড অক্ষরকেও সমর্থন করে।

https://gist.github.com/gingofthesouth/54bea667b28a815b2fe33a4da986e327


2
কিছু দুর্ভাগ্য কারণে এই সংস্করণটি মাঝে মধ্যে একটি দেয়EXC_BAD_INSTRUCTION
জো

আরে জো, আপনার কি এমন কোনও ডেমো কোড রয়েছে যা এই ত্রুটিটি পুনরুত্পাদন করতে পারে?
আর্নেস্ট কানিংহাম

দেখি কি করতে পারি; আমি কেবল এটির সাথে আইবি অ্যাকশন আউটলেটে কল করেছিলাম let random = randomString(16)। EXC কেবলমাত্র একটি বাস্তব ডিভাইসে ছিল এবং আমি এটি কোনও সিমুলেটারে দেখতে পাইনি এবং এটি ডিভাইসে অন্তর্বর্তী ছিল।
জো

1
কেন এই 32 বিট ডিভাইসের অর্ধেক সময় ক্র্যাশ কারণে এই তাই প্রশ্ন দেখতে পাবেন stackoverflow.com/questions/25274265/...
julien_c

গুরুত্বপূর্ণ: (সর্বদা) অভিন্ন বিতরণ তৈরি random % countকরে না । এটি যদি আপনার সাথে প্রাসঙ্গিক হয় তবে অন্যান্য যে উত্তরগুলি ব্যবহার করা হচ্ছে সেগুলি সন্ধান করুন arc4random_uniform()
রাফেল

6

যেসব চরিত্রের পুরো সেট টাইপ করতে চান না তাদের জন্য:

func randomAlphanumericString(length: Int) -> String  {
    enum Statics {
        static let scalars = [UnicodeScalar("a").value...UnicodeScalar("z").value,
                              UnicodeScalar("A").value...UnicodeScalar("Z").value,
                              UnicodeScalar("0").value...UnicodeScalar("9").value].joined()

        static let characters = scalars.map { Character(UnicodeScalar($0)!) }
    }

    let result = (0..<length).map { _ in Statics.characters.randomElement()! }
    return String(result)
}

5

সুইফট ৩.০ এর জন্য

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
}

1
আপনি কি কোডটি ব্যবহার করে দেখেছেন? আপনি কি লক্ষ্য করেছেন যে ফিরে আসা স্ট্রিংয়ের দৈর্ঘ্যটি ভুল, এবং কেবলমাত্র অঙ্ক রয়েছে? স্ট্যাকওভারফ্লো . com / q / 39566062 / 1187415 দেখুন , যা একই সমস্যা।
মার্টিন আর

এটি প্রকাশ করার জন্য @ মার্টিনআরকে ধন্যবাদ আমি আমার উত্তর আপডেট করেছি
S1LENT WARRIOR

5

যে Stringকোনও একটি থেকে খাঁটি সুইফট এলোমেলো CharacterSet

ব্যবহার: CharacterSet.alphanumerics.randomString(length: 100)

extension CharacterSet {
    /// extracting characters
    /// https://stackoverflow.com/a/52133647/1033581
    public func characters() -> [Character] {
        return codePoints().compactMap { UnicodeScalar($0) }.map { Character($0) }
    }
    public func codePoints() -> [Int] {
        var result: [Int] = []
        var plane = 0
        for (i, w) in bitmapRepresentation.enumerated() {
            let k = i % 8193
            if k == 8192 {
                plane = Int(w) << 13
                continue
            }
            let base = (plane + k) << 3
            for j in 0 ..< 8 where w & 1 << j != 0 {
                result.append(base + j)
            }
        }
        return result
    }

    /// building random string of desired length
    /// https://stackoverflow.com/a/42895178/1033581
    public func randomString(length: Int) -> String {
        let charArray = characters()
        let charArrayCount = UInt32(charArray.count)
        var randomString = ""
        for _ in 0 ..< length {
            randomString += String(charArray[Int(arc4random_uniform(charArrayCount))])
        }
        return randomString
    }
}

characters()ফাংশন আমার দ্রুততম পরিচিত বাস্তবায়ন


3
func randomString(length: Int) -> String {
    // whatever letters you want to possibly appear in the output (unicode handled properly by Swift)
    let letters = "abcABC012你好吗😀🐱💥∆𝚹∌⌘"
    let n = UInt32(letters.characters.count)
    var out = ""
    for _ in 0..<length {
        let index = letters.startIndex.advancedBy(Int(arc4random_uniform(n)))
        out.append(letters[index])
    }
    return out
}

3

আমার আরও বেশি সুইফট-আইয়ার প্রশ্নের বাস্তবায়ন:

func randomAlphanumericString(length: Int) -> String {

    let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".characters
    let lettersLength = UInt32(letters.count)

    let randomCharacters = (0..<length).map { i -> String in
        let offset = Int(arc4random_uniform(lettersLength))
        let c = letters[letters.startIndex.advancedBy(offset)]
        return String(c)
    }

    return randomCharacters.joinWithSeparator("")
}

3

লুপ ফ্রি, যদিও এটি 43 টি অক্ষরের মধ্যে সীমাবদ্ধ। আপনার আরও বেশি প্রয়োজন হলে এটি পরিবর্তন করা যেতে পারে। কেবলমাত্র একটি ইউইউডি ব্যবহারের মাধ্যমে এই পদ্ধতির দুটি সুবিধা রয়েছে:

  1. কেবল বৃহত আকারের অক্ষরগুলি ব্যবহার করে বৃহত্তর এন্ট্রপি, UUID()কেবলমাত্র বড় হাতের অক্ষর তৈরি করে
  2. A UUIDসর্বাধিক 36 টি অক্ষর দীর্ঘ (4 হাইফেন সহ), তবে কেবল 32 অক্ষর দীর্ঘ। আপনার যদি আরও দীর্ঘ কিছু প্রয়োজন হয় বা হাইফেন অন্তর্ভুক্ত না চান তবে এটি ব্যবহার base64EncodedStringকরে

এছাড়াও, এই ফাংশনটি UIntনেতিবাচক সংখ্যাগুলি এড়াতে একটি ব্যবহার করে ।

 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))
    }

আউটপুট চেক করার জন্য এটিকে একটি লুপে কল করা:

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

যা উত্পাদন করে:

Nzk3NjgzMTdBQ0FBNDFCNzk2MDRENzZF
MUI5RURDQzE1RTdCNDA3RDg2MTI4QkQx
M0I3MjJBRjVFRTYyNDFCNkI5OUM1RUVC
RDA1RDZGQ0IzQjI1NDdGREI3NDgxM0Mx
NjcyNUQyOThCNzhCNEVFQTk1RTQ3NTIy
MDkwRTQ0RjFENUFGNEFDOTgyQTUxODI0
RDU2OTNBOUJGMDE4NDhEODlCNEQ1NjZG
RjM2MTUxRjM4RkY3NDU2OUFDOTI0Nzkz
QzUwOTE1N0U1RDVENDE4OEE5NTM2Rjcy
Nzk4QkMxNUJEMjYwNDJDQjhBQkY5QkY5
ODhFNjU0MDVEMUI2NEI5QUIyNjNCNkVF

3

সুইফ্ট 5.0

// Generating Random String
func randomString(length: Int) -> String {
    let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    return String((0..<length).map{ _ in letters.randomElement()! })
}
// Calling to string
label.text = randomString(length: 3)

2

"আমার এলোমেলো স্ট্রিং দরকার" প্রশ্নের (যে কোনও ভাষায়) প্রশ্নের প্রতিক্রিয়াগুলির সাথে সমস্যাটি কার্যত প্রতিটি সমাধান স্ট্রিং দৈর্ঘ্যের ত্রুটিযুক্ত প্রাথমিক স্পেসিফিকেশন ব্যবহার করে । প্রশ্নগুলি এলোমেলোভাবে স্ট্রিংগুলির প্রয়োজনীয়তার জন্য খুব কমই প্রকাশ করে তবে আমি আপনাকে চ্যালেঞ্জ জানাবো যে খুব কমই আপনার দৈর্ঘ্যের এলোমেলো স্ট্রিং দরকার, ৮. আপনার যা দরকার তা হ'ল কিছু অনন্য স্ট্রিং is যেমন উদাহরণস্বরূপ, কোনও উদ্দেশ্যে সনাক্তকারী হিসাবে ব্যবহার করা।

কঠোরভাবে অনন্য স্ট্রিংগুলি পাওয়ার জন্য দুটি প্রধান উপায় রয়েছে : ডিটারনিস্টিকালি (যা এলোমেলো নয়) এবং সঞ্চয় / তুলনা (যা অত্যন্ত জোরালো)। আমরা কি করি? আমরা ভূত ছেড়ে দিই। পরিবর্তে আমরা সম্ভাব্য স্বতন্ত্রতার সাথে যাই । এটি হ'ল আমরা স্বীকার করি যে কিছু কিছু (তবে ছোট) ঝুঁকি রয়েছে যে আমাদের স্ট্রিংগুলি অনন্য হবে না। এখানেই সংঘর্ষের সম্ভাবনা এবং এনট্রপি বোঝা সহায়ক।

সুতরাং আমি পুনরায় অল্প অল্প ঝুঁকির সাথে কয়েকটি সংখ্যক স্ট্রিংয়ের প্রয়োজন হিসাবে অদৃশ্য প্রয়োজনটিকে পুনরায় বলব। একটি দৃ concrete় উদাহরণ হিসাবে, আসুন আমরা 5 মিলিয়ন আইডি তৈরির সম্ভাবনা তৈরি করতে চাই say আপনি প্রতিটি নতুন স্ট্রিং সংরক্ষণ এবং তুলনা করতে চান না এবং আপনি এগুলি এলোমেলো হতে চান, তাই আপনি পুনরাবৃত্তি হওয়ার কিছুটা ঝুঁকি গ্রহণ করেন। উদাহরণস্বরূপ, আসুন পুনরাবৃত্তি হওয়ার ট্রিলিয়ন সম্ভাবনায় 1 এরও কম ঝুঁকি বলি। সুতরাং আপনার স্ট্রিংয়ের কত দৈর্ঘ্যের প্রয়োজন? ঠিক আছে, প্রশ্নটি অল্প সংজ্ঞাযুক্ত কারণ এটি ব্যবহৃত চরিত্রগুলির উপর নির্ভর করে। তবে আরও বড় কথা, এটি বিপথগামী। আপনার যা প্রয়োজন তা হল স্ট্রিংগুলির এনট্রপির একটি স্পেসিফিকেশন, তাদের দৈর্ঘ্য নয়। এন্ট্রপিটি কয়েকটি স্ট্রিংয়ের পুনরাবৃত্তির সম্ভাবনার সাথে সরাসরি সম্পর্কিত হতে পারে। স্ট্রিং দৈর্ঘ্য পারে না।

এবং এটি এন্ট্রপিস্ট্রিংয়ের মতো লাইব্রেরি সাহায্য করতে পারে। ৫ মিলিয়ন স্ট্রিংগুলিতে ব্যবহার করে ট্রিলিয়ন ট্রেন্ডের পুনরাবৃত্তি হওয়ার সম্ভাবনায় ১ টিরও কম র্যান্ডম আইডি তৈরি করতে EntropyString:

import EntropyString

let random = Random()
let bits = Entropy.bits(for: 5.0e6, risk: 1.0e12)
random.string(bits: bits)

"Rrrj6pN4d6GBrFLH4"

EntropyStringডিফল্ট হিসাবে 32 টি অক্ষর সহ একটি অক্ষর সেট ব্যবহার করে uses অন্যান্য পূর্বনির্ধারিত অক্ষর সেট রয়েছে এবং আপনি নিজের অক্ষরও নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ, উপরের মতো একই এনট্রপি সহ আইডি উত্পন্ন করা কিন্তু হেক্স অক্ষর ব্যবহার করে:

import EntropyString

let random = Random(.charSet16)
let bits = Entropy.bits(for: 5.0e6, risk: 1.0e12)
random.string(bits: bits)

"135fe71aec7a80c02dce5"

ব্যবহৃত অক্ষর সেটটিতে অক্ষরের মোট সংখ্যার পার্থক্যের কারণে স্ট্রিং দৈর্ঘ্যের পার্থক্যটি নোট করুন। সম্ভাব্য স্ট্রিংগুলির নির্দিষ্ট সংখ্যায় পুনরাবৃত্তি হওয়ার ঝুঁকি একই। স্ট্রিং দৈর্ঘ্য হয় না। এবং সর্বোপরি, পুনরাবৃত্তি হওয়ার ঝুঁকি এবং স্ট্রিংগুলির সম্ভাব্য সংখ্যা স্পষ্ট। স্ট্রিং দৈর্ঘ্যের সাথে আর অনুমান করা যায় না।


2

যদি আপনার এলোমেলো স্ট্রিংটি নিরাপদ-এলোমেলো হওয়া উচিত তবে এটি ব্যবহার করুন:

import Foundation
import Security

// ...

private static func createAlphaNumericRandomString(length: Int) -> String? {
    // create random numbers from 0 to 63
    // use random numbers as index for accessing characters from the symbols string
    // this limit is chosen because it is close to the number of possible symbols A-Z, a-z, 0-9
    // so the error rate for invalid indices is low
    let randomNumberModulo: UInt8 = 64

    // indices greater than the length of the symbols string are invalid
    // invalid indices are skipped
    let symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

    var alphaNumericRandomString = ""

    let maximumIndex = symbols.count - 1

    while alphaNumericRandomString.count != length {
        let bytesCount = 1
        var randomByte: UInt8 = 0

        guard errSecSuccess == SecRandomCopyBytes(kSecRandomDefault, bytesCount, &randomByte) else {
            return nil
        }

        let randomIndex = randomByte % randomNumberModulo

        // check if index exceeds symbols string length, then skip
        guard randomIndex <= maximumIndex else { continue }

        let symbolIndex = symbols.index(symbols.startIndex, offsetBy: Int(randomIndex))
        alphaNumericRandomString.append(symbols[symbolIndex])
    }

    return alphaNumericRandomString
}

1

আপনার যদি কেবল একটি অনন্য শনাক্তকারী প্রয়োজন হয় তবে UUID().uuidStringআপনার উদ্দেশ্যগুলি পরিবেশন করতে পারে।


1

সুইফট ৪ এর জন্য আপডেট হয়েছে। ক্লাস এক্সটেনশনে একটি অলস স্টোরেড ভেরিয়েবল ব্যবহার করুন। এটি কেবল একবার গণনা করা হয়।

extension String {

    static var chars: [Character] = {
        return "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".map({$0})
    }()

    static func random(length: Int) -> String {
        var partial: [Character] = []

        for _ in 0..<length {
            let rand = Int(arc4random_uniform(UInt32(chars.count)))
            partial.append(chars[rand])
        }

        return String(partial)
    }
}

String.random(length: 10) //STQp9JQxoq

1

সুইফট 4

ব্যবহার RandomNumberGenerator অ্যাপল সুপারিশ হিসাবে ভাল কার্য সম্পাদনার জন্য

ব্যবহার: String.random(20) ফলাফল:CifkNZ9wy9jBOT0KJtV4

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

        while randomString.utf8.count < length{
            let randomLetter = letters.randomElement()
            randomString += randomLetter?.description ?? ""
        }
        return randomString
    }
}

0

এটি আমি নিয়ে আসতে পারি সুইফট- ইস্ট সমাধান। সুইফট 3.0

extension String {
    static func random(length: Int) -> String {
        let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
        let randomLength = UInt32(letters.characters.count)

        let randomString: String = (0 ..< length).reduce(String()) { accum, _ in
            let randomOffset = arc4random_uniform(randomLength)
            let randomIndex = letters.index(letters.startIndex, offsetBy: Int(randomOffset))
            return accum.appending(String(letters[randomIndex]))
        }

        return randomString
    } 
}

-1
func randomUIDString(_ wlength: Int) -> String {

    let letters : NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    var randomString = ""

    for _ in 0 ..< wlength {
        let length = UInt32 (letters.length)
        let rand = arc4random_uniform(length)
        randomString = randomString.appendingFormat("%C", letters.character(at: Int(rand)));
    }

    return randomString
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.