Essayer de générer des chiffres aléatoires avec la classe de rails de SecureDandom. Pouvons-nous créer un nombre aléatoire avec SE SI SECURANANDOM.HEX qui ne comprend que des chiffres et aucun alphabet.
Par exemple: p>
au lieu de p>
SecureRandom.hex(4) => "95237267"
4 Réponses :
Consultez l'API pour SECURAINANDOM: http://rails.rubyonRails.org/classes /Activesupport/securerandom.html
Je pense que vous recherchez une méthode différente: #random_number. P> puisque #hex retourne un nombre hexadécimal, Il serait inhabituel de demander un résultat aléatoire qui ne contenait que des caractères numériques. P> pour les cas d'utilisation de base, il est assez simple d'utiliser #rand. P> def rand_by_length(length)
rand((9.to_s * length).to_i).to_s.center(length, rand(9).to_s).to_i
end
Merci de corriger le "numéro hexadécimal", je voudrais l'expliquer plus loin, je cherchais réellement un nombre aléatoire avec une longueur spécifique (disons 8), Hex restreint la longueur si vous demandez quelque chose de similaire, SECURAINADAND pourrait avoir qui générerait des nombres seul. SIMERAIREANDOML.RANDOM_NUMBER (N) ne permet probablement pas cela? Random_Number
Mise à jour de ma réponse basée sur votre commentaire.
Les identifiants numériques sont bons car ils sont plus faciles à lire sur le téléphone (n ° C pour Charlie).
Essayez ceci p> et pour les points de bonus rompre Pour faciliter la lecture p>
length = 4 [*'0'..'9'].sample(length).join as simple as that :)
Mon 1 cent: sans la splat (0..9) .à_a.sample (longueur) .join code>
@ Swap.nil pourquoi est-ce mieux?
Cela ne fonctionne pas pour les longueurs souhaitées> 10. Cela utilisera également chaque nombre une seule fois.
Ceci créera un certain nombre de longueurs souhaitées.
length = 11 rand(10**length..(10**length+1)-1).to_s