Vb6 Comment puis-je faire une chaîne aléatoire de 0-9 et a-z de x caractères
En essayant de créer une chaîne de caractères aléatoires, x caractères à l'aide des touches 0-9 et a-z/A-Z et n'arrive pas à trouver un bon exemple, des idées?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
S'il vous plaît être conscient que le built-in générateur de nombre aléatoire n'est pas cryprographically à l'abri d'une fonction comme celle-ci ne doit pas être utilisé pour générer des mots de passe.
J'ai oublié tous mes VB6 (Dieu merci) mais en pseudo-code, c'est assez facile:
Donc, c'est juste une question de trouver comment faire pour créer un tableau et le remplir avec des personnages, la façon d'obtenir la longueur de la matrice et comment obtenir un nombre aléatoire entre le premier et le dernier index de ladite matrice.
Bien, tout ça et le bouclage de cours.
Joël méthode est très bien (sauf pour le nombre entier variable de boucle, et à l'aide de "+" pour la concaténation). (-:
Cependant, la sortie peut être plus intéressant dans un couple des manières.
Tout d'abord, vous pouvez générer des chaînes qui ont le même approximative de la fréquence de distribution de communes du texte anglais, par la création d'une graine de chaîne avec beaucoup plus de Ee et Tt caractères que Zz caractères. Une chaîne de peut-être 1000 caractères (le double si des majuscules et des minuscules) dans cette approximative de mélange en œuvre OK.
Ajouter en nombre égal à 0..9 caractères dans quelque rapport que vous aimeriez voir dans la sortie finale. Vous pouvez également shuffle cette chaîne pour le rendre plus aléatoire, mais il n'a pas vraiment d'importance.
Ensuite utiliser un hasard sélecteur dans la gamme de 1..Len(seedstring) à choisir chaque personnage, tout comme dans de Joel exemple.
Pourquoi faire cela? Pas de bonne raison, sauf que les résultats seront plus familiers.
Une deuxième option consiste à générer deux de ces graines de chaînes, l'un des consonnes dans le corpus de poids, et l'autre avec les voyelles dans la même pondération (plus E que O de U, etc). Je voudrais utiliser un seul cas, pas de casse mixte.
Puis alternez deux sélections aléatoires, d'abord les consonnes, puis de les voyelles, pour générer des bigrammes comme les TI, WO, DE, et ainsi de suite. La chaîne de la forme "mots".
Parce que le résultat est prononçable, il est beaucoup plus facile à retenir. De Plus, il ressemble étrangement Japonais. (-:
Notre L'endurance bibliothèque (ASM fonctions pour VB/VBA) a des routines que vous faites ces choses, mais il est assez facile dans le plus pur VB.
Inspiré par cette question, j'ai demandé à un question similaire où je propose l'utilisation d'un GUID pour générer la séquence. Le court venue de cela, comme je l'ai souligné, c'est que si il n'y a pas d'autres failles dans ma logique, alors il y aura une séquence aléatoire de A à F et 10 chiffres. Si vous pouvez vivre avec le fait que les lettres G et Z sont manquant, alors ce pourrait être une solution pour vous.
Utilisation Aléatoire
Int(Rnd * (bas)) + (haut) va générer un nombre aléatoire
Générer un tableau avec les valeurs de l'asc("a") pour l'asc("z") et de l'asc("0") pour l'asc("9")
Générer des nombre aléatoire entre 1 et 26 (10+26) et rechercher dans un tableau.
N'avez pas installé VB6 plus.
À l'aide de l'algorithme de Vinko Vrsalovic, voici la funcionay code, merci et à bientôt!
Vous n'avez pas vraiment dire ce que vous avez été en utilisant ce. Si vous avez besoin de petites chaînes (<=32,766) je pense que Joël fonction d'amende. Toutefois, si vous besoin de quelque chose pour générer de très grandes chaînes de caractères, cela pourrait être utile. Sur mon système, il va faire un 1 000 000 de chaîne de char dans 0.33291015625 secondes (oui je sais... marteau:)) vous pouvez Aussi paramétrer le jeu de caractères de sorte que vous n'avez pas à modifier le code chaque fois que vous voulez faire quelque chose de "spécial":) :
Si vous utilisez SQL base de données, vous pouvez générer un PrimaryKey comme ceci:
SELECT NEWID() as KeyValue
C'est une très bonne manière et aussi très sécurisé.