SecureRandom 클래스의 레일을 사용하여 임의의 숫자를 생성하려고합니다. SecureRandom.hex로 임의의 숫자를 만들 수 있습니다. 여기에는 숫자와 알파벳 만 포함됩니다. 예를 들어보안 임의의 16 진수 숫자 만
:
대신
SecureRandom.hex(4)
=> "95bf7267"
의 그것은
SecureRandom.hex(4)
=> "95237267"
SecureRandom 클래스의 레일을 사용하여 임의의 숫자를 생성하려고합니다. SecureRandom.hex로 임의의 숫자를 만들 수 있습니다. 여기에는 숫자와 알파벳 만 포함됩니다. 예를 들어보안 임의의 16 진수 숫자 만
:
대신
SecureRandom.hex(4)
=> "95bf7267"
의 그것은
SecureRandom.hex(4)
=> "95237267"
체크 아웃을 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를 호출합니다. 그것은 당신의 필요를 충족시킬 수 있습니다.
숫자 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"
감사합니다 그것을 휴식에 들어 더 자세히 설명하고 싶습니다. 실제로 특정 길이의 난수를 찾고있었습니다 (s ay 8), hex는 길이를 제한하여 비슷한 것을 궁금해하기 때문에 SecureRandom은 숫자 만 생성합니다. SecureRandom.random_number (n)이 허용하지 않을 가능성이 있습니까? [임의 번호] (http://rails.rubyonrails.org/classes/ActiveSupport/SecureRandom.html#M000733) – swapab
내 의견을 바탕으로 내 답변을 업데이트했습니다. – rossta
멋지다 ... 그 코드에 대해 고마움을 많이 ... – swapab