web-dev-qa-db-fra.com

Générer une chaîne aléatoire unique avec lettres et chiffres en minuscule

Comment puis-je corriger ce code afin qu'il génère des lettres et des chiffres aléatoires uniques en minuscules?

api_string = (0...32).map{65.+(Rand(25)).chr}.join    

Pour le moment, il ne génère que des lettres.

34
donald

Si vous utilisez Ruby 1.9.2, vous pouvez utiliser SecureRandom:

irb(main):001:0> require 'securerandom'
=> true
irb(main):002:0> SecureRandom.hex(13)
=> "5bbf194bcf8740ae8c9ce49e97"
irb(main):003:0> SecureRandom.hex(15)
=> "d2413503a9618bacfdb1745eafdb0f"
irb(main):004:0> SecureRandom.hex(32)
=> "432e0a359bbf3669e6da610d57ea5d0cd9e2fceb93e7f7989305d89e31073690"
83

Toutes les lettres et tous les chiffres, voilà comment les chiffres sont représentés en base 36. 

api_string = Array.new(32){Rand(36).to_s(36)}.join
26
steenslag

8.times.map { [*'0'..'9', *'a'..'z'].sample }.join

15
Anuja Joshi

j'ai oublié d'où, mais j'ai lu ceci d'une façon ou d'une autre ce matin

l,m = 24,36
Rand(m**l).to_s(m).rjust(l,'0')

il crée un nombre aléatoire de 0 à puissance (36,24), puis le convertit en chaîne en base 36 (c'est à dire 0-9 et a-z)

2
Kokizzu

Voici une façon de le faire:

POSSIBLE = (('A'..'Z').to_a + (0..9).to_a)
api_string = (0...32).map { |n| POSSIBLE.sample }.join

Si Active Support est disponible, vous pouvez également le faire pour créer une chaîne semblable à une clé API:

ActiveSupport::SecureRandom.hex(32)
2
Jimmy Cuadra

Cela générera une chaîne aléatoire inférieure de 32 à 50 caractères, comprenant des chiffres et des lettres, les deux:

require 'string_pattern'

puts "32-50:/xN/".gen
1
Mario Ruiz
((('a'..'z').to_a + (0..9).to_a)*3).shuffle[0,(Rand(100).to_i)].join

Remplacez Rand(100) par Rand(n)n est la longueur maximale de la chaîne souhaitée. 

1
AGS
CHARS = (?0..?9).to_a + (?a..?z).to_a
api_string = 32.times.inject("") {|s, i| s << CHARS[Rand(CHARS.size)]}
1
Guilherme Bernal

Les nouvelles versions de Ruby supportent SecureRandom.base58 , ce qui vous donnera des jetons beaucoup plus denses que hex, sans caractères spéciaux.

> SecureRandom.base58(24)
> "Zp9N4aYvQfz3E6CmEzkadoa2" 
0
Meekohi

utilisant SecureRandom du langage Ruby.

require 'securerandom' randomstring = SecureRandom.hex(5)

Il générera la chaîne aléatoire n * 2 contenant «0-9» et «a-f»

0
veeresh yh