Je veux appeler une méthode, lui transmettre la longueur et la faire générer une chaîne alphanumérique aléatoire.
Existe-t-il des bibliothèques d'utilitaires qui peuvent avoir un tas de ces types de fonctions?
objective-c
cocoa
string
random
alphanumeric
quartier
la source
la source
NSString
pourletters
quand un simplechar
tableau fonctionnerait très bien. En fait, l'utilisation[letters characterAtIndex:(rand() % [letters length])]
me semble moins concise que justeletters[rand() % strlen(letters)]
. Les classes Foundation sont vraiment utiles, mais pour les choses les plus simples, elles peuvent servir à obfustifier notre code plutôt qu'à l'améliorer.%C
place de%c
, carcharacterAtIndex:
renvoie ununichar
arc4random_uniform((int)[letters length])
Pas exactement ce que vous demandez, mais toujours utile:
Exemple de sortie:
la source
la source
alphabet
chaque fois? Il est constant et ne dépend pas de la boucle.NSArray
cache sonlength
, ne devrait pas être un goulot d'étranglement de performance.Vous pouvez sûrement raccourcir:
la source
Si vous souhaitez vous limiter aux caractères hexadécimaux uniquement, l'option la plus simple consiste à générer un UUID:
Exemple de sortie:
16E3DF0B-87B3-4162-A1A1-E03DB2F59654
.Si vous voulez une chaîne aléatoire plus petite, vous ne pouvez saisir que les 8 premiers caractères.
Il est une version 4 UUID qui signifie que le premier caractère du groupe 3 et 4 ne sont pas au hasard (ils seront toujours
4
et l' un des8
,9
,A
ouB
).Tous les autres caractères de la chaîne sont entièrement aléatoires et vous pouvez générer des millions d'UUID chaque seconde pendant des centaines d'années sans grand risque que le même UUID soit généré deux fois.
la source
NSString *uuid = [UUID UUID]
Une version de catégorie de la réponse de Jeff B.
NSString + Random.h
NSString + Random.m
la source
Vous pouvez également simplement générer un UUID. Bien qu'ils ne soient pas vraiment aléatoires, ils sont complexes et uniques, ce qui les rend aléatoires pour la plupart des utilisations. Générez-en une sous forme de chaîne, puis prenez une plage de caractères égale à la longueur transmise.
la source
Rapide
la source
64
en dur par un fichierupperBound
. Je calcule enupperBound
dehors du bloc parce que je pense que cela fonctionne mieux.Voici une manière différente de s'y attaquer. Au lieu d'utiliser une chaîne de caractères préparée, vous pouvez convertir des entiers et des caractères et générer une liste dynamique de caractères à sélectionner. C'est plutôt simple et rapide, mais avec un peu plus de code.
Lorsque je fais de la génération aléatoire de caractères, je préfère travailler directement avec des entiers et les convertir, au lieu d'écrire la liste des caractères dont je veux tirer. La déclaration des variables en haut le rend plus indépendant du système, mais ce code suppose que les nombres auront une valeur inférieure à celle des lettres et que les lettres majuscules auront une valeur inférieure aux lettres minuscules.
la source
Solution alternative dans Swift
la source
En plus de la bonne réponse donnée par Melvin, voici une fonction que j'ai créée ( dans SWIFT! ) Pour obtenir une chaîne aléatoire:
Voici un résultat de test de l'appel
randomStringOfLength(10)
: uXa0igA8wmla source
Génère une chaîne aléatoire alphanumérique minuscule avec une longueur donnée:
la source
Modification de quelques idées ici, et dans done Swift 4.0
Usage:
la source
Si vous voulez une chaîne Unicode aléatoire, vous pouvez créer des octets aléatoires, puis utiliser les octets valides.
La conversion de NSString en NSData et inversement est nécessaire pour obtenir une chaîne UTF-8 valide. Sachez que la longueur ne sera pas nécessairement la longueur de la NSString créée à la fin.
la source
Je l'ai fait en utilisant un simple
char[]
au lieu d'unNSString *
pour l'alphabet. J'ai ajouté ceci à une catégorie NSString.la source
la source
Méthode pour appeler:
Méthode:
Résultats:
la source
pour Swift 3.0
la source
la source
Modification de la réponse de keithyip:
la source