Comment générer une chaîne de caractères aléatoires en Ruby

Je suis en train de générer un 8-caractère pseudo-aléatoire en majuscules chaîne pour "A" .. "Z":

value = ""; 8.times{value  << (65 + rand(25)).chr}

mais il n'a pas l'air propre, et il ne peut pas être passé comme argument car il n'est pas un état unique. Pour obtenir un casse mixte chaîne "a" .. "z" plus "A" .. "Z", je l'ai changé pour:

value = ""; 8.times{value << ((rand(2)==1?65:97) + rand(25)).chr}

mais il semble comme une poubelle.

Quelqu'un aurait-il une meilleure méthode?

  • Je ne comprends pas pourquoi vous vous souciez que "comme il n'est pas un état unique, il ne peut pas être passé comme argument". Pourquoi ne pas simplement faire un utilitaire ou de la méthode d'assistance?
  • Supposons qu'il existe une méthode pour réinitialiser le mot de passe et il a un argument pour le nouveau mot de passe. Je voudrais passer une chaine de caractère aléatoire, dans le code ci-dessus j'ai besoin d'une variable tmp, alors que dans la seule déclaration des exemples soufflet je peux faire la chose entière comme une seule ligne. Assurez-vous un utilitaire méthode pourrait être sympa dans le long terme, esp si je suis besoin de semblable ici et là, mais parfois vous voulez juste en place, un temps, fait.
  • Non, vous n'avez pas à utiliser une variable temporaire. Essayez ceci: reset_user_password!(random_string)def random_string; SecureRandom.urlsafe_base64(20) end
  • 8 lettres est un honteusement mot de passe faible. Compte tenu de la somme md5 d'un PC moderne pourrait récupérer le mot de passe dans 30 secondes. Comment parler de quelque chose de plus securerandom.urlsafe_base64
  • Lol, ok qui a été posée en 2008, assurez-vous permet de bosse qui jusqu'à 15 ou plus.
  • Pourquoi est-ce que avez tellement de nombreuses réponses? Pas qu'il n'est pas utile, mais je suis curieux de voir comment il a attiré l'attention.
  • bien, mettre un webdesigner en face de VIM et de lui demander d'enregistrer et de sortie; Blagues à part. require 'securerandom'; SecureRandom.hex(15) devrait fonctionner correctement