8
votes

Sécuriser des chiffres hexagonaux aléatoires uniquement

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"


0 commentaires

4 Réponses :


10
votes

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> xxx pré>

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


2 commentaires

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.



1
votes

Les identifiants numériques sont bons car ils sont plus faciles à lire sur le téléphone (n ° C pour Charlie).

Essayez ceci xxx

et pour les points de bonus rompre Pour faciliter la lecture xxx


0 commentaires

0
votes
length = 4

[*'0'..'9'].sample(length).join
as simple as that :)

3 commentaires

Mon 1 cent: sans la splat (0..9) .à_a.sample (longueur) .join


@ Swap.nil pourquoi est-ce mieux?


Cela ne fonctionne pas pour les longueurs souhaitées> 10. Cela utilisera également chaque nombre une seule fois.



0
votes

Ceci créera un certain nombre de longueurs souhaitées.

length = 11

rand(10**length..(10**length+1)-1).to_s


0 commentaires