2012-09-25 3 views
5

SecureRandom 클래스의 레일을 사용하여 임의의 숫자를 생성하려고합니다. SecureRandom.hex로 임의의 숫자를 만들 수 있습니다. 여기에는 숫자와 알파벳 만 포함됩니다. 예를 들어보안 임의의 16 진수 숫자 만

:

대신

SecureRandom.hex(4) 
=> "95bf7267" 

의 그것은

SecureRandom.hex(4) 
=> "95237267" 

답변

8

체크 아웃을 SecureRandom를위한 API를 제공한다 : 나는 당신이 찾고있는 생각 http://rails.rubyonrails.org/classes/ActiveSupport/SecureRandom.html

을 다른 방법 : #random_number.

SecureRandom.random_number(a_big_number) 

#hex는 16 진수를 반환하므로 숫자 문자 만 포함 된 임의의 결과를 묻는 것이 일반적이지 않습니다.

기본 사용 사례는 #rand를 사용하기에 충분합니다.

rand(9999) 

편집 :

나는 지정된 길이의 난수를 생성하는 라이브러리를 잘 모르는 것 같아요,하지만 하나를 쓸 간단한데. 여기에 내 패스입니다 :

def rand_by_length(length) 
    rand((9.to_s * length).to_i).to_s.center(length, rand(9).to_s).to_i 
end 

메소드 #rand_by_length는 PARAM로 정수를 지정 길이를 취하고 길이에 따라 최대 숫자의 임의의 숫자를 생성하려고합니다. String # center는 누락 된 숫자를 임의의 숫자로 채우는 데 사용됩니다. 최악의 경우 지정된 길이의 각 숫자에 대해 #rand를 호출합니다. 그것은 당신의 필요를 충족시킬 수 있습니다.

+0

감사합니다 그것을 휴식에 들어 더 자세히 설명하고 싶습니다. 실제로 특정 길이의 난수를 찾고있었습니다 (s ay 8), hex는 길이를 제한하여 비슷한 것을 궁금해하기 때문에 SecureRandom은 숫자 만 생성합니다. SecureRandom.random_number (n)이 허용하지 않을 가능성이 있습니까? [임의 번호] (http://rails.rubyonrails.org/classes/ActiveSupport/SecureRandom.html#M000733) – swapab

+0

내 의견을 바탕으로 내 답변을 업데이트했습니다. – rossta

+0

멋지다 ... 그 코드에 대해 고마움을 많이 ... – swapab

1

숫자 ID는 전화로 읽기가 쉽기 때문에 좋습니다 (찰리에게는 c가 없음).

보십시오이

length = 20 
id = (SecureRandom.random_number * (10**length)).round.to_s # => "98075825200269950976" 

및 보너스 포인트는 "16 진수"에 수정을 위해 그 :)로

id.split(//).each_slice(4).to_a.map(&:join).join('-') # => "9807-5825-2002-6995-0976" 
1
length = 4 

[*'0'..'9'].sample(length).join 

간단 쉽게 읽을

+0

깜빡, 감사합니다. @zondo – avital

+0

내 1 센트 : 표시가없는 경우'(0..9) .to_a.sample (length) .join' – swapab

+0

@ swap.nil 왜 더 낫지? – avital