Skip to content

Instantly share code, notes, and snippets.

@depthlove
Forked from mdippery/NSString+Random.h
Created June 22, 2018 05:29
Show Gist options
  • Save depthlove/9c9a6b821350b534e9172cb75d97cb74 to your computer and use it in GitHub Desktop.
Save depthlove/9c9a6b821350b534e9172cb75d97cb74 to your computer and use it in GitHub Desktop.

Revisions

  1. @mdippery mdippery revised this gist Apr 26, 2012. 2 changed files with 105 additions and 0 deletions.
    33 changes: 33 additions & 0 deletions NSStringRandom.h
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    /*
    * Copyright (C) 2011 Michael Dippery <[email protected]>
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
    * in the Software without restriction, including without limitation the rights
    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the Software is
    * furnished to do so, subject to the following conditions:
    *
    * The above copyright notice and this permission notice shall be included in
    * all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    * THE SOFTWARE.
    */

    #import <Foundation/Foundation.h>

    @interface NSString (Randomized)
    + (NSString *)defaultAlphabet;
    + (id)randomizedString;
    + (id)randomizedStringWithAlphabet:(NSString *)alphabet;
    + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len;
    - (id)initWithDefaultAlphabet;
    - (id)initWithAlphabet:(NSString *)alphabet;
    - (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len;
    @end
    72 changes: 72 additions & 0 deletions NSStringRandom.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,72 @@
    /*
    * Copyright (C) 2011 Michael Dippery <[email protected]>
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
    * in the Software without restriction, including without limitation the rights
    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the Software is
    * furnished to do so, subject to the following conditions:
    *
    * The above copyright notice and this permission notice shall be included in
    * all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    * THE SOFTWARE.
    */

    #import "NSString+Random.h"
    #include <stdlib.h>

    #define DEFAULT_LENGTH 8

    @implementation NSString (Randomized)

    + (NSString *)defaultAlphabet
    {
    return @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789";
    }

    + (id)randomizedString
    {
    return [self randomizedStringWithAlphabet:[self defaultAlphabet]];
    }

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet
    {
    return [self randomizedStringWithAlphabet:alphabet length:DEFAULT_LENGTH];
    }

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    return [[[self alloc] initWithAlphabet:alphabet length:len] autorelease];
    }

    - (id)initWithDefaultAlphabet
    {
    return [self initWithAlphabet:[NSString defaultAlphabet]];
    }

    - (id)initWithAlphabet:(NSString *)alphabet
    {
    return [self initWithAlphabet:alphabet length:DEFAULT_LENGTH];
    }

    - (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    [self release];
    NSMutableString *s = [NSMutableString stringWithCapacity:len];
    for (NSUInteger i = 0U; i < len; i++) {
    u_int32_t r = arc4random() % [alphabet length];
    unichar c = [alphabet characterAtIndex:r];
    [s appendFormat:@"%C", c];
    }
    return [s copy];
    }

    @end
  2. @mdippery mdippery revised this gist Dec 28, 2011. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion NSString+Random.m
    Original file line number Diff line number Diff line change
    @@ -64,7 +64,7 @@ - (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    for (NSUInteger i = 0U; i < len; i++) {
    u_int32_t r = arc4random() % [alphabet length];
    unichar c = [alphabet characterAtIndex:r];
    [s appendFormat:@"%c", c];
    [s appendFormat:@"%C", c];
    }
    return [NSString stringWithString:s];
    }
  3. @mdippery mdippery revised this gist Dec 28, 2011. 1 changed file with 33 additions and 0 deletions.
    33 changes: 33 additions & 0 deletions NSString+Random.h
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,33 @@
    /*
    * Copyright (C) 2011 Michael Dippery <[email protected]>
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
    * in the Software without restriction, including without limitation the rights
    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the Software is
    * furnished to do so, subject to the following conditions:
    *
    * The above copyright notice and this permission notice shall be included in
    * all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    * THE SOFTWARE.
    */

    #import <Foundation/Foundation.h>

    @interface NSString (Randomized)
    + (NSString *)defaultAlphabet;
    + (id)randomizedString;
    + (id)randomizedStringWithAlphabet:(NSString *)alphabet;
    + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len;
    - (id)initWithDefaultAlphabet;
    - (id)initWithAlphabet:(NSString *)alphabet;
    - (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len;
    @end
  4. @mdippery mdippery revised this gist Dec 28, 2011. 2 changed files with 1 addition and 73 deletions.
    2 changes: 1 addition & 1 deletion NSString+Random.m
    Original file line number Diff line number Diff line change
    @@ -44,7 +44,7 @@ + (id)randomizedStringWithAlphabet:(NSString *)alphabet

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    return [[self alloc] initWithAlphabet:alphabet length:len];
    return [[[self alloc] initWithAlphabet:alphabet length:len] autorelease];
    }

    - (id)initWithDefaultAlphabet
    72 changes: 0 additions & 72 deletions NSStringRandom.m
    Original file line number Diff line number Diff line change
    @@ -1,72 +0,0 @@
    /*
    * Copyright (C) 2011 Michael Dippery <[email protected]>
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
    * in the Software without restriction, including without limitation the rights
    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the Software is
    * furnished to do so, subject to the following conditions:
    *
    * The above copyright notice and this permission notice shall be included in
    * all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    * THE SOFTWARE.
    */

    #import "NSString+Random.h"
    #include <stdlib.h>

    #define DEFAULT_LENGTH 8

    @implementation NSString (Randomized)

    + (NSString *)defaultAlphabet
    {
    return @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789";
    }

    + (id)randomizedString
    {
    return [self randomizedStringWithAlphabet:[self defaultAlphabet]];
    }

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet
    {
    return [self randomizedStringWithAlphabet:alphabet length:DEFAULT_LENGTH];
    }

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    return [[[self alloc] initWithAlphabet:alphabet length:len] autorelease];
    }

    - (id)initWithDefaultAlphabet
    {
    return [self initWithAlphabet:[NSString defaultAlphabet]];
    }

    - (id)initWithAlphabet:(NSString *)alphabet
    {
    return [self initWithAlphabet:alphabet length:DEFAULT_LENGTH];
    }

    - (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    [self release];
    NSMutableString *s = [NSMutableString stringWithCapacity:len];
    for (NSUInteger i = 0U; i < len; i++) {
    u_int32_t r = arc4random() % [alphabet length];
    unichar c = [alphabet characterAtIndex:r];
    [s appendFormat:@"%c", c];
    }
    return [NSString stringWithString:s];
    }

    @end
  5. @mdippery mdippery revised this gist Dec 28, 2011. 1 changed file with 72 additions and 0 deletions.
    72 changes: 72 additions & 0 deletions NSStringRandom.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,72 @@
    /*
    * Copyright (C) 2011 Michael Dippery <[email protected]>
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
    * in the Software without restriction, including without limitation the rights
    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the Software is
    * furnished to do so, subject to the following conditions:
    *
    * The above copyright notice and this permission notice shall be included in
    * all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    * THE SOFTWARE.
    */

    #import "NSString+Random.h"
    #include <stdlib.h>

    #define DEFAULT_LENGTH 8

    @implementation NSString (Randomized)

    + (NSString *)defaultAlphabet
    {
    return @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789";
    }

    + (id)randomizedString
    {
    return [self randomizedStringWithAlphabet:[self defaultAlphabet]];
    }

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet
    {
    return [self randomizedStringWithAlphabet:alphabet length:DEFAULT_LENGTH];
    }

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    return [[[self alloc] initWithAlphabet:alphabet length:len] autorelease];
    }

    - (id)initWithDefaultAlphabet
    {
    return [self initWithAlphabet:[NSString defaultAlphabet]];
    }

    - (id)initWithAlphabet:(NSString *)alphabet
    {
    return [self initWithAlphabet:alphabet length:DEFAULT_LENGTH];
    }

    - (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    [self release];
    NSMutableString *s = [NSMutableString stringWithCapacity:len];
    for (NSUInteger i = 0U; i < len; i++) {
    u_int32_t r = arc4random() % [alphabet length];
    unichar c = [alphabet characterAtIndex:r];
    [s appendFormat:@"%c", c];
    }
    return [NSString stringWithString:s];
    }

    @end
  6. @mdippery mdippery revised this gist Dec 28, 2011. 1 changed file with 0 additions and 72 deletions.
    72 changes: 0 additions & 72 deletions NSStringRandom.m
    Original file line number Diff line number Diff line change
    @@ -1,72 +0,0 @@
    /*
    * Copyright (C) 2011 Michael Dippery <[email protected]>
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
    * in the Software without restriction, including without limitation the rights
    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the Software is
    * furnished to do so, subject to the following conditions:
    *
    * The above copyright notice and this permission notice shall be included in
    * all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    * THE SOFTWARE.
    */

    #import "NSString+Random.h"
    #include <stdlib.h>

    #define DEFAULT_LENGTH 8

    @implementation NSString (Randomized)

    + (NSString *)defaultAlphabet
    {
    return @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789";
    }

    + (id)randomizedString
    {
    return [self randomizedStringWithAlphabet:[self defaultAlphabet]];
    }

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet
    {
    return [self randomizedStringWithAlphabet:alphabet length:DEFAULT_LENGTH];
    }

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    return [[self alloc] initWithAlphabet:alphabet length:len];
    }

    - (id)initWithDefaultAlphabet
    {
    return [self initWithAlphabet:[NSString defaultAlphabet]];
    }

    - (id)initWithAlphabet:(NSString *)alphabet
    {
    return [self initWithAlphabet:alphabet length:DEFAULT_LENGTH];
    }

    - (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    [self release];
    NSMutableString *s = [NSMutableString stringWithCapacity:len];
    for (NSUInteger i = 0U; i < len; i++) {
    u_int32_t r = arc4random() % [alphabet length];
    unichar c = [alphabet characterAtIndex:r];
    [s appendFormat:@"%c", c];
    }
    return [NSString stringWithString:s];
    }

    @end
  7. @mdippery mdippery revised this gist Dec 28, 2011. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion NSStringRandom.m
    Original file line number Diff line number Diff line change
    @@ -44,7 +44,7 @@ + (id)randomizedStringWithAlphabet:(NSString *)alphabet

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    return [[[self alloc] initWithAlphabet:alphabet length:len] autorelease];
    return [[self alloc] initWithAlphabet:alphabet length:len];
    }

    - (id)initWithDefaultAlphabet
  8. @mdippery mdippery revised this gist Dec 28, 2011. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions NSStringRandom.m
    Original file line number Diff line number Diff line change
    @@ -44,7 +44,7 @@ + (id)randomizedStringWithAlphabet:(NSString *)alphabet

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    return [[self alloc] initWithAlphabet:alphabet length:len];
    return [[[self alloc] initWithAlphabet:alphabet length:len] autorelease];
    }

    - (id)initWithDefaultAlphabet
    @@ -64,7 +64,7 @@ - (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    for (NSUInteger i = 0U; i < len; i++) {
    u_int32_t r = arc4random() % [alphabet length];
    unichar c = [alphabet characterAtIndex:r];
    [s appendFormat:@"%C", c];
    [s appendFormat:@"%c", c];
    }
    return [NSString stringWithString:s];
    }
  9. @mdippery mdippery revised this gist Nov 11, 2011. 1 changed file with 72 additions and 0 deletions.
    72 changes: 72 additions & 0 deletions NSStringRandom.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,72 @@
    /*
    * Copyright (C) 2011 Michael Dippery <[email protected]>
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
    * in the Software without restriction, including without limitation the rights
    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the Software is
    * furnished to do so, subject to the following conditions:
    *
    * The above copyright notice and this permission notice shall be included in
    * all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    * THE SOFTWARE.
    */

    #import "NSString+Random.h"
    #include <stdlib.h>

    #define DEFAULT_LENGTH 8

    @implementation NSString (Randomized)

    + (NSString *)defaultAlphabet
    {
    return @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789";
    }

    + (id)randomizedString
    {
    return [self randomizedStringWithAlphabet:[self defaultAlphabet]];
    }

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet
    {
    return [self randomizedStringWithAlphabet:alphabet length:DEFAULT_LENGTH];
    }

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    return [[self alloc] initWithAlphabet:alphabet length:len];
    }

    - (id)initWithDefaultAlphabet
    {
    return [self initWithAlphabet:[NSString defaultAlphabet]];
    }

    - (id)initWithAlphabet:(NSString *)alphabet
    {
    return [self initWithAlphabet:alphabet length:DEFAULT_LENGTH];
    }

    - (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    [self release];
    NSMutableString *s = [NSMutableString stringWithCapacity:len];
    for (NSUInteger i = 0U; i < len; i++) {
    u_int32_t r = arc4random() % [alphabet length];
    unichar c = [alphabet characterAtIndex:r];
    [s appendFormat:@"%C", c];
    }
    return [NSString stringWithString:s];
    }

    @end
  10. @mdippery mdippery created this gist Feb 8, 2011.
    72 changes: 72 additions & 0 deletions NSString+Random.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,72 @@
    /*
    * Copyright (C) 2011 Michael Dippery <[email protected]>
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
    * in the Software without restriction, including without limitation the rights
    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the Software is
    * furnished to do so, subject to the following conditions:
    *
    * The above copyright notice and this permission notice shall be included in
    * all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    * THE SOFTWARE.
    */

    #import "NSString+Random.h"
    #include <stdlib.h>

    #define DEFAULT_LENGTH 8

    @implementation NSString (Randomized)

    + (NSString *)defaultAlphabet
    {
    return @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789";
    }

    + (id)randomizedString
    {
    return [self randomizedStringWithAlphabet:[self defaultAlphabet]];
    }

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet
    {
    return [self randomizedStringWithAlphabet:alphabet length:DEFAULT_LENGTH];
    }

    + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    return [[self alloc] initWithAlphabet:alphabet length:len];
    }

    - (id)initWithDefaultAlphabet
    {
    return [self initWithAlphabet:[NSString defaultAlphabet]];
    }

    - (id)initWithAlphabet:(NSString *)alphabet
    {
    return [self initWithAlphabet:alphabet length:DEFAULT_LENGTH];
    }

    - (id)initWithAlphabet:(NSString *)alphabet length:(NSUInteger)len
    {
    [self release];
    NSMutableString *s = [NSMutableString stringWithCapacity:len];
    for (NSUInteger i = 0U; i < len; i++) {
    u_int32_t r = arc4random() % [alphabet length];
    unichar c = [alphabet characterAtIndex:r];
    [s appendFormat:@"%c", c];
    }
    return [NSString stringWithString:s];
    }

    @end