কোকোয় এলোমেলোভাবে বর্ণমালা তৈরি করুন


145

আমি একটি পদ্ধতি কল করতে চাই, এটি দৈর্ঘ্যটি পাস করতে এবং এটি এলোমেলোভাবে বর্ণমালা তৈরি করতে চাই।

সেখানে কি কোনও ইউটিলিটি লাইব্রেরি রয়েছে যা এই ধরণের ফাংশনগুলির একটি গুচ্ছ থাকতে পারে?

উত্তর:


312

এখানে একটি দ্রুত এবং নোংরা বাস্তবায়ন। পরীক্ষা করা হয়নি।

NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

-(NSString *) randomStringWithLength: (int) len {

    NSMutableString *randomString = [NSMutableString stringWithCapacity: len];

    for (int i=0; i<len; i++) {
         [randomString appendFormat: @"%C", [letters characterAtIndex: arc4random_uniform([letters length])]];
    }

    return randomString;
}

1
জেনআর্যান্ডস্ট্রিংলেন্থে কেবল র্যান্ডমস্ট্রিংটি ফিরে আসা উচিত। সম্পূর্ণ নতুন স্ট্রিং বরাদ্দকরণ এবং আরম্ভের (এবং স্বতঃপ্রণোদিত নয়!) কোনও কারণ নেই।
কেভিনজেসনার

5
এখানে এটি করা যাচ্ছে। একটা ব্যবহার করার কোনও কারণ নেই NSStringজন্য lettersযখন একটি সহজ charবিন্যাস ঠিক সূক্ষ্ম কাজ করবে। আসলে, ব্যবহার [letters characterAtIndex:(rand() % [letters length])]করা আমার কাছে ন্যায়বিচারের চেয়ে কম সংক্ষিপ্ত বলে মনে হয় letters[rand() % strlen(letters)]। ফাউন্ডেশন ক্লাসগুলি সত্যই সহায়ক, তবে সাধারণ জিনিসগুলির জন্য, তারা আমাদের কোডটিকে উন্নত করার পরিবর্তে অপসারণ করতে পারে।
জোনাথন স্টার্লিং

3
%Cপরিবর্তে আপনি চাইবেন %c, কারণ characterAtIndex:কোনওunichar
ব্যবহারকারী 102008

8
যখন অ্যারের দৈর্ঘ্য দুটির শক্তি না হয় তখন আরক 4 ব্র্যান্ডম ব্যবহার করা পক্ষপাতদুষ্ট ফলাফল তৈরি করে। arc4random_uniform এটি ঠিক করে।
jlukanta

9
ওহ সংকলক নির্ভুলতা হারাতে একটি সতর্কতা দেবে, তাই পূর্বে অন্তর্ভুক্ত করা ভালarc4random_uniform((int)[letters length])
ন্যাশন

103

আপনি যা চান ঠিক তা নয়, তবে এখনও কার্যকর:

[[NSProcessInfo processInfo] globallyUniqueString]

নমুনা আউটপুট:

450FEA63-2286-4B49-8ACC-9822C7D4356B-1376-00000239A4AC4FD5

2
এটি প্রশ্নের সংক্ষিপ্ততম এবং সবচেয়ে সোজা উপায় way
আদিব 6'15

এমনকি যদি এটিতে হাইফেন থাকে - যদি এটি উদ্বেগ না হয় তবে দুর্দান্ত!
ফতুহোকু

মাইল দ্বারা সেরা উত্তর
রামবাতিনো

"কোকোতে এলোমেলোভাবে বর্ণমালা তৈরি করতে" আমার প্রয়োজনের জন্য উপযুক্ত। ওপিকে ঠিক যা বলেছে তা নয়, কারণ তিনি যুক্ত করেছেন যা "এই দৈর্ঘ্যটি পাস করুন" যা YAGNI!
jkoreska

5
এটি বেশিরভাগ ব্যবহারের জন্য সম্ভবত ঠিক আছে তবে সুরক্ষার প্রয়োজনে যদি আপনার এলোমেলো স্ট্রিংয়ের প্রয়োজন হয় তবে ব্যবহার করবেন না। অনন্য! = এলোমেলো। দৈর্ঘ্য অবিচ্ছিন্ন, ব্যবহৃত অক্ষরের পরিসর সীমিত (0-9, এএফ, - = 17, 62 এজেডের জন্য বনাম 0-9)। এই স্ট্রিংটি অনন্য তবে অনুমানযোগ্য।
এএমসিসি

67
NSString *alphabet  = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789";
NSMutableString *s = [NSMutableString stringWithCapacity:20];
for (NSUInteger i = 0U; i < 20; i++) {
    u_int32_t r = arc4random() % [alphabet length];
    unichar c = [alphabet characterAtIndex:r];
    [s appendFormat:@"%C", c];
}

13
আপনার কি alphabetপ্রতিটি বারের দৈর্ঘ্যটি সত্যিই জিজ্ঞাসা করতে হবে ? এটি ধ্রুবক এবং লুপের উপর নির্ভর করে না।
jv42

1
প্রতিটি 10 ​​টি অক্ষরের 1M পাসওয়ার্ড তৈরি করে পরীক্ষিত এবং এটি দুর্দান্ত কাজ করে।
নক্সির

1
NSArrayএটির ক্যাশে length, কোনও পারফরম্যান্স বাধা হওয়া উচিত নয়।
পাস্কাল

আমি রাজী. এটি একটি সাধারণ সম্পত্তি অ্যাক্সেস। আপনি যতবার জিজ্ঞাসা করবেন এটি নিজেকে গণনা করছে না।
ডিভাইস 1

45

অবশ্যই আপনি এই খাটো করতে পারেন:

+(NSString*)generateRandomString:(int)num {
    NSMutableString* string = [NSMutableString stringWithCapacity:num];
    for (int i = 0; i < num; i++) {
        [string appendFormat:@"%C", (unichar)('a' + arc4random_uniform(26))];
    }
    return string;
}

2
কেন -1? এর সাথে মোটেও কোনও ভুল নেই। এটি সমস্ত উত্তরগুলির মধ্যে সবচেয়ে অনুকূলতমরূপে অনুকূল।
জন রিসেলভাতো

5
এটির সাথে কোনও ভুল নেই wrong এটি একটি দুর্দান্ত এবং সংক্ষিপ্ত সমাধান। (আমি আশা করি এসওরা নিম্নবিত্তদের বিষয়ে একটি মন্তব্য কার্যকর করবে))
আলভি

সব থেকে ভালো সমাধান. একমাত্র মন্তব্য, আমি এটি স্থির পদ্ধতিতে তৈরি করব।
আন্দ্রে টচিজভ

9
একমাত্র ক্ষতি হ'ল এটি আসলে বর্ণানুক্রমিক নয়, কেবল ছোট অক্ষর। ;-)
প্রাইমারী ফেডার

আমার মনে হয় আপনার 25 থেকে 26 পরিবর্তন করা দরকার, অন্যথায় আপনি কখনই 'জেড' পাবেন না।
মার্কাস অ্যাডামস

28

আপনি যদি কেবলমাত্র হেক্স অক্ষরগুলির মধ্যে নিজেকে সীমাবদ্ধ রাখতে ইচ্ছুক হন, তবে সবচেয়ে সহজ বিকল্পটি একটি ইউইউডি উত্পন্ন করা:

NSString *uuid = [NSUUID UUID].UUIDString;

উদাহরণ আউটপুট: 16E3DF0B-87B3-4162-A1A1-E03DB2F59654

আপনি যদি একটি ছোট এলোমেলো স্ট্রিং চান তবে আপনি কেবল প্রথম 8 টি অক্ষর দখল করতে পারেন।

এটা তোলে একটি সংস্করণ 4 UUID যা 3 য় এবং 4 র্থ দলের প্রথম অক্ষর মানে দৈব না হয় (তারা সবসময় হতে হবে 4এবং এক 8, 9, AবাB )।

স্ট্রিংয়ের প্রতিটি অন্যান্য চরিত্র সম্পূর্ণরূপে এলোমেলো এবং আপনি একই সেকেন্ডে দু'বার উত্পন্ন হওয়ার ঝুঁকি ছাড়াই কয়েকশ বছর ধরে প্রতি সেকেন্ডে কয়েক মিলিয়ন ইউইউডি তৈরি করতে পারেন।


1
আপনি কেবল ব্যবহার করতে পারেনNSString *uuid = [UUID UUID]
অরকোডেন

@ কর্কডেন ধন্যবাদ, আমার কোডটি কিছু আইওএস 5 কোড থেকে ছিল। আমি নতুন আইওএস 6 / ওএস এক্স 10.8 এপিআই ব্যবহার করতে আমার উত্তর আপডেট করব।
অভি বেকার্ট

@ অভিবেকার্ট একই প্রথম 8 টি অক্ষর পাওয়ার ঝুঁকি ছাড়াই কেবল প্রথম 8 টি অক্ষর ব্যবহার করা কি নিরাপদ?
বিশাল সিং

1
@ বিষালসিংহ হ্যাঁ, এটি নিরাপদ, যদিও আপনি এটিকে সংক্ষিপ্ত হওয়ার ঝুঁকিটিকে তত বেশি সংক্ষিপ্ত করে তুলছেন।
অভি বেকার্ট

3
এনএসএসস্ট্রিং * উউইড = [ইউইউডি ইউইউডি]। ইউইউডি স্ট্রিং; আপনাকে "অঘোষিত শনাক্তকারী ইউডিউইডের ব্যবহার" ত্রুটি দেবে, সুতরাং কোডে কেবলমাত্র একটি ছোট পরিবর্তন এনএসএসস্ট্রিং * uuid = [এনএসইউইউড ইউইউডি] ব্যবহার করুন Uউইড স্ট্রিং;
আব্বাস মুলানী ২

24

জেফ বি এর উত্তরের একটি বিভাগের সংস্করণ।

NSString + + Random.h

#import <Foundation/Foundation.h>

@interface NSString (Random)

+ (NSString *)randomAlphanumericStringWithLength:(NSInteger)length;

@end

NSString + + Random.m

#import "NSString+Random.h"

 @implementation NSString (Random)

+ (NSString *)randomAlphanumericStringWithLength:(NSInteger)length
{ 
    NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    NSMutableString *randomString = [NSMutableString stringWithCapacity:length];

    for (int i = 0; i < length; i++) {
        [randomString appendFormat:@"%C", [letters characterAtIndex:arc4random() % [letters length]]];
    }

    return randomString;
}

@end

1
বিভাগগুলি কীভাবে ব্যবহার করবেন এটির একটি দুর্দান্ত উদাহরণ!
এলমারটিক

7

আপনি কেবল একটি ইউইউডি তৈরি করতে পারেন। সত্যিকারের এলোমেলো নয়, এগুলি জটিল এবং অনন্য যা তাদের বেশিরভাগ ব্যবহারের জন্য এলোমেলোভাবে উপস্থিত করে তোলে। স্ট্রিং হিসাবে একটি উত্পন্ন করুন এবং তারপরে পাসের দৈর্ঘ্যের সমান অক্ষরের পরিসর নিন।


সুরক্ষার সাথে সম্পর্কিত যে কোনও বিষয়ে আমি এর বিরুদ্ধে দৃ strongly়ভাবে পরামর্শ দেব। সিউডো-এলোমেলোতা হ্যাকারগুলি মজাদার সিস্টেমে ব্যবহার করা সবচেয়ে বড় ধরণের সম্ভাবনাগুলির মধ্যে একটি, কারণ তারা পূর্বাভাস দেয়। যতটা সম্ভব বাস্তব-এলোমেলো কাছাকাছি ব্যবহার করুন।
শায়নে

5

দ্রুতগতি

func randomStringWithLength(length: Int) -> String {
    let alphabet = "-_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    let upperBound = UInt32(count(alphabet))
    return String((0..<length).map { _ -> Character in
        return alphabet[advance(alphabet.startIndex, Int(arc4random_uniform(upperBound)))]
    })
}

1
সংক্ষিপ্ত এবং মিষ্টি। আমি যখন বর্ণমালা পরিবর্তন করতাম তখন ব্যতীত আমার জন্য এটি কাজ করে, কারণ এটি বর্ণমালার দৈর্ঘ্য কঠোর কোডেড হওয়ায় ক্রাশ হয়। আমি 64 কে UInt32 (গণনা (বর্ণমালা) দিয়ে প্রতিস্থাপন করেছি
স্কুটার্মেগ

ঠিক আছে. আমি 64একটি গণনা দিয়ে হার্ডকোডযুক্ত প্রতিস্থাপন করেছি upperBound। আমি upperBoundব্লকের বাইরে গণনা করি কারণ আমি মনে করি এটি আরও ভাল করে।
ma11hew28

'Alphabet.characters.count' ব্যবহার করে হ্যান্ডলগুলি টাইপের আর্গুমেন্টের তালিকা (স্ট্রিং) দিয়ে 'গণনা' করা যাবে না
জাপোরোজচেনকো ওলেকসান্দ্র

বর্ণমালা ফিরিয়ে দিন [বর্ণমালা.স্টার্টআইডেক্স.এডভান্সডবি (ইন্ট (আরক 4 ব্র্যান্ডম_উনিফর্ম (আপারবাউন্ড)))
ওলেকসান্দ্র

4

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

int charNumStart = (int) '0';
int charNumEnd = (int) '9';
int charCapitalStart = (int) 'A';
int charCapitalEnd = (int) 'Z';
int charLowerStart = (int) 'a';
int charLowerEnd = (int) 'z';

int amountOfChars = (charNumEnd - charNumStart) + (charCapitalEnd - charCapitalStart) + (charLowerEnd - charLowerStart); // amount of the characters we want.
int firstGap = charCapitalStart - charNumEnd; // there are gaps of random characters between numbers and uppercase letters, so this allows us to skip those.
int secondGap = charLowerStart - charCapitalEnd; // similar to above, but between uppercase and lowercase letters.

// START generates a log to show us which characters we are considering for our UID.
NSMutableString *chars = [NSMutableString stringWithCapacity:amountOfChars];
for (int i = charNumStart; i <= charLowerEnd; i++) {
    if ((i >= charNumStart && i <= charNumEnd) || (i >= charCapitalStart && i <= charCapitalEnd) || (i >= charLowerStart && i <= charLowerEnd)) {
        [chars appendFormat:@"\n%c", (char) i];
    }
}
NSLog(@"chars: %@", chars);
// END log

// Generate a uid of 20 characters that chooses from our desired range.
int uidLength = 20;
NSMutableString *uid = [NSMutableString stringWithCapacity:uidLength];
for (int i = 0; i < uidLength; i++) {
    // Generate a random number within our character range.
    int randomNum = arc4random() % amountOfChars;
    // Add the lowest value number to line this up with a desirable character.
    randomNum += charNumStart;
    // if the number is in the letter range, skip over the characters between the numbers and letters.
    if (randomNum > charNumEnd) {
        randomNum += firstGap;
    }
    // if the number is in the lowercase letter range, skip over the characters between the uppercase and lowercase letters.
    if (randomNum > charCapitalEnd) {
        randomNum += secondGap;
    }
    // append the chosen character.
    [uid appendFormat:@"%c", (char) randomNum];
}
NSLog(@"uid: %@", uid);

// Generate a UID that selects any kind of character, including a lot of punctuation. It's a bit easier to do it this way.
int amountOfAnyCharacters = charLowerEnd - charNumStart; // A new range of characters.
NSMutableString *multiCharUid = [NSMutableString stringWithCapacity:uidLength];
for (int i = 0; i < uidLength; i++) {
    // Generate a random number within our new character range.
    int randomNum = arc4random() % amountOfAnyCharacters;
    // Add the lowest value number to line this up with our range of characters.
    randomNum += charNumStart;
    // append the chosen character.
    [multiCharUid appendFormat:@"%c", (char) randomNum];
}
NSLog(@"multiCharUid: %@", multiCharUid);

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


3

সুইফটে বিকল্প সমাধান

func generateString(len: Int) -> String {
    let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    let lettersLength = UInt32(countElements(letters))
    let result = (0..<len).map { _ -> String in
        let idx = Int(arc4random_uniform(lettersLength))
        return String(letters[advance(letters.startIndex, idx)])
    }
    return "".join(result)
}

2

মেলভিনের দেওয়া উত্তরের উত্তরে যোগ করা, এলোমেলো স্ট্রিং পেতে আমি এখানে একটি ফাংশন তৈরি করেছি ( সুইডে! ):

func randomStringOfLength(length:Int)->String{
    var wantedCharacters:NSString="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789"
    var s=NSMutableString(capacity: length)
    for (var i:Int = 0; i < length; i++) {
        let r:UInt32 = arc4random() % UInt32( wantedCharacters.length)
        let c:UniChar = wantedCharacters.characterAtIndex( Int(r) )
        s.appendFormat("%C", c)
    }
    return s
}

কল করা থেকে এখানে একটি পরীক্ষার ফলাফল randomStringOfLength(10): uXa0igA8wm


2

প্রদত্ত দৈর্ঘ্যের সাথে ছোট হাতের আলফানিউমেরিক এলোমেলো স্ট্রিং উত্পন্ন করে:

-(NSString*)randomStringWithLength:(NSUInteger)length
{
    NSMutableString* random = [NSMutableString stringWithCapacity:length];

    for (NSUInteger i=0; i<length; i++)
    {
        char c = '0' + (unichar)arc4random()%36;
        if(c > '9') c += ('a'-'9'-1);
        [random appendFormat:@"%c", c];
    }

    return random;
}

2

এখানে কয়েকটি ধারণার পরিবর্তন এবং সম্পাদিত সুইফট ৪.০

extension String
{
    subscript (i: Int) -> Character
    {
        return self[index(startIndex, offsetBy:i)]
    }

    static func Random(length:Int=32, alphabet:String="ABCDEF0123456789") -> String
    {
        let upperBound = UInt32(alphabet.count)
        return String((0..<length).map { _ -> Character in
            return alphabet[Int(arc4random_uniform(upperBound))]
        })
    }
}

ব্যবহার:

let myHexString = String.Random()
let myLongHexString = String.Random(length:64)
let myLettersString = String.Random(length:32, alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ")

1

আপনি যদি একটি এলোমেলো ইউনিকোড স্ট্রিং চান তবে আপনি এলোমেলো বাইট তৈরি করতে পারেন এবং তারপরে বৈধটি ব্যবহার করতে পারেন।

    OSStatus sanityCheck = noErr;
    uint8_t * randomBytes = NULL;
    size_t length = 200; // can of course be variable

    randomBytes = malloc( length * sizeof(uint8_t) );
    memset((void *)randomBytes, 0x0, length);

    sanityCheck = SecRandomCopyBytes(kSecRandomDefault, length, randomBytes);

    if (sanityCheck != noErr) NSLog(@"Error generating random bytes, OSStatus == %ld.", sanityCheck);

    NSData* randomData = [[NSData alloc] initWithBytes:(const void *)randomBytes length: length];
    if (randomBytes) free(randomBytes);

    NSString* dataString = [[NSString alloc] initWithCharacters:[randomData bytes] length:[randomData length]];  // create an NSString from the random bytes
    NSData* tempData = [dataString dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];             // remove illegal characters from string
    NSString* randomString = [[NSString alloc] initWithData:tempData encoding:NSUTF8StringEncoding];

একটি বৈধ ইউটিএফ -8 স্ট্রিং পেতে এনএসএসটিং থেকে এনএসডিটা এবং পিছনে রূপান্তর প্রয়োজন is সচেতন হন যে দৈর্ঘ্যটি শেষ পর্যন্ত এনএসএসস্ট্রিংয়ের দৈর্ঘ্য হিসাবে তৈরি হবে না।


1

আমি বর্ণমালার char[]পরিবর্তে একটি সরল ব্যবহার করে NSString *এটি করেছি। আমি এটি একটি এনএসএসস্ট্রিং বিভাগে যুক্ত করেছি।

static const char __alphabet[] =
    "0123456789"
    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    "abcdefghijklmnopqrstuvwxyz";
+ (NSString *)randomString:(int)length
{
    NSMutableString *randomString = [NSMutableString stringWithCapacity:length];
    u_int32_t alphabetLength = (u_int32_t)strlen(__alphabet);
    for (int i = 0; i < length; i++) {
        [randomString appendFormat:@"%c", __alphabet[arc4random_uniform(alphabetLength)]];
    }
    return randomString;
}

1
static NSUInteger length = 32;
static NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
NSMutableString * randomString = [NSMutableString stringWithCapacity:length];
for (NSInteger i = 0; i < length; ++i) {
    [randomString appendFormat: @"%C", [letters characterAtIndex:(NSUInteger)arc4random_uniform((u_int32_t)[letters length])]];
}

1

কল করার পদ্ধতি:


NSString *string = [self stringWithRandomSuffixForFile:@"file.pdf" withLength:4]

পদ্ধতি:


- (NSString *)stringWithRandomSuffixForFile:(NSString *)file withLength:(int)length
{
    NSString *alphabet = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    NSString *fileExtension = [file pathExtension];
    NSString *fileName = [file stringByDeletingPathExtension];
    NSMutableString *randomString = [NSMutableString stringWithFormat:@"%@_", fileName];

    for (int x = 0; x < length; x++) {
        [randomString appendFormat:@"%C", [alphabet characterAtIndex: arc4random_uniform((int)[alphabet length]) % [alphabet length]]];
    }
    [randomString appendFormat:@".%@", fileExtension];

    NSLog(@"## randomString: %@ ##", randomString);
    return randomString;
}

ফলাফল:


## randomString: file_Msci.pdf ##
## randomString: file_xshG.pdf ##
## randomString: file_abAD.pdf ##
## randomString: file_HVwV.pdf ##

1

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

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
}

0
#define ASCII_START_NUMERS 0x30
#define ASCII_END_NUMERS 0x39
#define ASCII_START_LETTERS_A 0x41
#define ASCII_END_LETTERS_Z 0x5A
#define ASCII_START_LETTERS_a 0x61
#define ASCII_END_LETTERS_z 0x5A

-(NSString *)getRandomString:(int)length {
    NSMutableString *result = [[NSMutableString alloc]init];
    while (result.length != length) {
        NSMutableData* data = [NSMutableData dataWithLength:1];
        SecRandomCopyBytes(kSecRandomDefault, 1, [data mutableBytes]);
        Byte currentChar = 0;
        [data getBytes:&currentChar length:1];
        NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        if (currentChar > ASCII_START_NUMERS && currentChar < ASCII_END_NUMERS) { // 0 to 0
            [result appendString:s];
            continue;
        }
        if (currentChar > ASCII_START_LETTERS_A && currentChar < ASCII_END_LETTERS_Z) { // 0 to 0
            [result appendString:s];
            continue;
        }
        if (currentChar > ASCII_START_LETTERS_a && currentChar < ASCII_END_LETTERS_z) { // 0 to 0
            [result appendString:s];
            continue;
        }
    }
    return result;
}

0

কীথিউপের উত্তরের জন্য পরিবর্তন:

+ (NSString *)randomAlphanumericStringWithLength:(NSInteger)length
{
    static NSString * const letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        srand(time(NULL));
    });

    NSMutableString *randomString = [NSMutableString stringWithCapacity:length];

    for (int i = 0; i < length; i++) {
        [randomString appendFormat:@"%C", [letters characterAtIndex:arc4random() % [letters length]]];
    }

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