La création d'un unique alphanumérique de 10 caractères chaîne de caractères
Je cherche à créer un simple court terme le système de réservation, et je voudrais générer des numéros de confirmation qui sont
- unique
- hasard-à la recherche
- alphanumérique
- court-ish, au moins beaucoup plus courte que 32 caractères les chaînes retournées par sha1
Je suis seulement à la recherche de ~500 réservations, donc je n'ai pas imaginer haute probabilité de collissions.
Une idée que j'ai eu est de générer un hash sha1 basé sur un horodatage et un nom d'utilisateur, puis la tronquant à ses 10 premiers caractères. Serait quelque chose comme ça de façon fiable et assez unique pour le traitement de ~500 réservations?
OriginalL'auteur saturdayplace | 2009-01-21
Vous devez vous connecter pour publier un commentaire.
Il devrait y avoir aucune différence dans le caractère aléatoire de toute peu de hachage SHA-1, de sorte que c'est possible. Une autre façon serait de plier la table de hachage en utilisant XOR jusqu'à ce que vous avez 60 bits de données, puis de l'encoder à l'aide de En Base 64 pour obtenir un principalement alpha-résultat numérique.
Ce n'est nécessaire que si vous voulez être en mesure de générer le même Id à plusieurs reprises pour les mêmes données d'entrée. Sinon, si un id aléatoire que vous générez une fois, et à conserver après cela, utilisez Anders " suggestion. Si vous obtenez un conflit, il vous suffit de créer un autre.
OriginalL'auteur Eclipse
Vous pouvez utiliser ce que, même un simple générateur de nombres aléatoires; cependant, vous devez vérifier que le code de réservation n'est pas déjà présent. Si c'est le cas, ajouter des personnages ("x") de la chaîne (date+de l'utilisateur) jusqu'à ce que vous obtenez une nouvelle aléatoire/sha1/etc.
Une autre idée stupide: générer 1000 ou 2000 nombres aléatoires avec les propriétés désirées, les stocker dans un endroit, et de les affecter à des utilisateurs qu'ils s'inscrivent 🙂
OriginalL'auteur Federico A. Ramponi
Voici un moyen de le faire en Perl:
Je ne me souviens pas combien de temps le temps (le) de la partie est, de sorte que vous pourriez avoir à ajuster les chiffres pour s'adapter à votre longueur. Vous pouvez également supprimer cette partie si vous n'en avez pas besoin.
OriginalL'auteur Anders Sandvig
Si c'est vraiment juste 500, puis pré-générer de 20 000 d'entre eux, dans une table, puis obtenir le "inutilisé suivant un" quand vous en avez besoin.
Si vous étiez à pickle un générateur pour une utilisation dans un avenir exécution, auriez-vous besoin de remplacer la marinés générateur d'après les exécutions suivantes persister valeurs.
OriginalL'auteur Gregg Lind
Quelques bons conseils sur cette question: Comment puis-je créer un hasard alpha-numérique chaîne de caractères en C++?
J'aimerais éviter d'inclure des caractères tels que "1", "l", et "O", "0" et "5", "S" et "Z", "2" dans votre chaîne, pour le rendre plus facile pour les clients quand ils ont besoin de lire votre code de réservation par téléphone. L'algorithme présenté lors que ce lien devrait vous aider à le faire.
OriginalL'auteur jm.
utiliser un guid? 16 caractères, mais si vous avez vraiment ne se soucient pas de collision, vous pouvez simplement choisir les n premiers caractères.
Le guid de l'algorithme est de garantir l'unicité seulement, vous ne pouvez pas assumer les générées guid aléatoire qui serait une exigence pour l'utiliser comme un id de session.
voir aussi stackoverflow.com/questions/467271/...
OriginalL'auteur Daniel
En C#, vous pouvez utiliser http://www.dotnetfunda.com/forums/thread1357-how-do-generate-unique-alpha-numeric-random-number-in-aspnet.aspx (le moyen super facile, disent-ils)
OriginalL'auteur Raja1