Spec-Zone.ru › Ruby 2.6

модуль Random::Formatter

Форматирует случайное число как Random

Константы

ALPHANUMERIC

Публичные методы экземпляров

alphanumeric(n=nil) Показать исходный код
# File lib/securerandom.rb, line 307
def alphanumeric(n=nil)
  n = 16 if n.nil?
  choose(ALPHANUMERIC, n)
end

SecureRandom.alphanumeric генерирует случайную строку из букв и цифр.

Аргумент n задаёт длину строки в символах.

Если n не указан или равен nil, используется значение 16. В будущем оно может быть увеличено.

Результат может содержать символы A-Z, a-z и 0-9.

require 'securerandom'

SecureRandom.alphanumeric     #=> "2BuBuLf3WfSKyQbR"
SecureRandom.alphanumeric(10) #=> "i6K93NdqiH"

Если генератор случайных чисел недоступен, генерируется исключение NotImplementedError.

base64(n=nil) Показать исходный код
# File lib/securerandom.rb, line 178
def base64(n=nil)
  [random_bytes(n)].pack("m0")
end

SecureRandom.base64 генерирует случайную строку в формате base64.

Аргумент n задаёт длину случайного числа в байтах. Длина результирующей строки примерно равна 4/3 от n.

Если n не указан или равен nil, используется значение 16. В будущем оно может быть увеличено.

Результат может содержать символы A-Z, a-z, 0-9, “+”, “/” и “=”.

require 'securerandom'

SecureRandom.base64 #=> "/2BuBuLf3+WfSKyQbRcc/A=="
SecureRandom.base64 #=> "6BbW0pxO0YENxn38HMUbcQ=="

Если генератор случайных чисел недоступен, генерируется исключение NotImplementedError.

См. RFC 3548 для определения формата base64.

hex(n=nil) Показать исходный код
# File lib/securerandom.rb, line 155
def hex(n=nil)
  random_bytes(n).unpack("H*")[0]
end

SecureRandom.hex генерирует случайную шестнадцатеричную строку.

Аргумент n задаёт длину случайного числа в байтах. Длина результирующей шестнадцатеричной строки в два раза больше n.

Если n не указан или равен nil, используется значение 16. В будущем оно может быть увеличено.

Результат может содержать символы 0-9 и a-f.

require 'securerandom'

SecureRandom.hex #=> "eb693ec8252cd630102fd0d0fb7c3485"
SecureRandom.hex #=> "91dc3bfb4de5b11d029d376634589b61"

Если генератор случайных чисел недоступен, генерируется исключение NotImplementedError.

random_number → float Показать исходный код
random_number(max) → число
rand → float
rand(max) → число
static VALUE
rand_random_number(int argc, VALUE *argv, VALUE obj)
{
    rb_random_t *rnd = try_get_rnd(obj);
    VALUE v = rand_random(argc, argv, obj, rnd);
    if (NIL_P(v)) v = rand_random(0, 0, obj, rnd);
    else if (!v) invalid_argument(argv[0]);
    return v;
}

Генерирует отформатированное случайное число из исходных случайных байтов. См. Random#rand.

random_bytes(n=nil) Показать исходный код
# File lib/securerandom.rb, line 133
def random_bytes(n=nil)
  n = n ? n.to_int : 16
  gen_random(n)
end

SecureRandom.random_bytes генерирует случайную двоичную строку.

Аргумент n задаёт длину результирующей строки.

Если n не указан или равен nil, используется значение 16. В будущем оно может быть увеличено.

Результат может содержать любые байты: “x00” - “xff”.

require 'securerandom'

SecureRandom.random_bytes #=> "\xD8\\\xE0\xF4\r\xB2\xFC*WM\xFF\x83\x18\xF45\xB6"
SecureRandom.random_bytes #=> "m\xDC\xFC/\a\x00Uf\xB2\xB2P\xBD\xFF6S\x97"

Если генератор случайных чисел недоступен, генерируется исключение NotImplementedError.

random_number → float Показать исходный код
random_number(max) → число
static VALUE
rand_random_number(int argc, VALUE *argv, VALUE obj)
{
    rb_random_t *rnd = try_get_rnd(obj);
    VALUE v = rand_random(argc, argv, obj, rnd);
    if (NIL_P(v)) v = rand_random(0, 0, obj, rnd);
    else if (!v) invalid_argument(argv[0]);
    return v;
}

Генерирует отформатированное случайное число из исходных случайных байтов. См. Random#rand.

urlsafe_base64(n=nil, padding=false) Показать исходный код
# File lib/securerandom.rb, line 210
def urlsafe_base64(n=nil, padding=false)
  s = [random_bytes(n)].pack("m0")
  s.tr!("+/", "-_")
  s.delete!("=") unless padding
  s
end

SecureRandom.urlsafe_base64 генерирует случайную URL-безопасную строку в формате base64.

Аргумент n задаёт длину случайного числа в байтах. Длина результирующей строки примерно равна 4/3 от n.

Если n не указан или равен nil, используется значение 16. В будущем оно может быть увеличено.

Логический аргумент padding определяет включение заполнения. Если он равен false или nil, заполнение не генерируется. В противном случае заполнение генерируется. По умолчанию заполнение не генерируется, так как “=” может использоваться в качестве разделителя URL.

Результат может содержать символы A-Z, a-z, 0-9, “-” и “_”. “=” также используется, если padding равен true.

require 'securerandom'

SecureRandom.urlsafe_base64 #=> "b4GOKm4pOYU_-BOXcrUGDg"
SecureRandom.urlsafe_base64 #=> "UZLdOkzop70Ddx-IJR0ABg"

SecureRandom.urlsafe_base64(nil, true) #=> "i0XQ-7gglIsHGV2_BNPrdQ=="
SecureRandom.urlsafe_base64(nil, true) #=> "-M8rLhr7JEpJlqFGUMmOxg=="

Если генератор случайных чисел недоступен, генерируется исключение NotImplementedError.

См. RFC 3548 для определения URL-безопасного формата base64.

uuid() Показать исходный код
# File lib/securerandom.rb, line 232
def uuid
  ary = random_bytes(16).unpack("NnnnnN")
  ary[2] = (ary[2] & 0x0fff) | 0x4000
  ary[3] = (ary[3] & 0x3fff) | 0x8000
  "%08x-%04x-%04x-%04x-%04x%08x" % ary
end

SecureRandom.uuid генерирует случайный UUID версии 4 (универсальный уникальный идентификатор).

require 'securerandom'

SecureRandom.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
SecureRandom.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"
SecureRandom.uuid #=> "62936e70-1815-439b-bf89-8492855a7e6b"

UUID версии 4 полностью случайный (кроме версии). Он не содержит значимой информации, такой как MAC-адреса, временные метки и т.д.

Результат содержит 122 случайных бита (15,25 случайных байтов).

См. RFC 4122 для получения подробной информации о UUID.

Приватные методы экземпляров

choose(source, n) Показать исходный код
# File lib/securerandom.rb, line 260
        def choose(source, n)
  size = source.size
  m = 1
  limit = size
  while limit * size <= 0x100000000
    limit *= size
    m += 1
  end
  result = ''.dup
  while m <= n
    rs = random_number(limit)
    is = rs.digits(size)
    (m-is.length).times { is << 0 }
    result << source.values_at(*is).join('')
    n -= m
  end
  if 0 < n
    rs = random_number(limit)
    is = rs.digits(size)
    if is.length < n
      (n-is.length).times { is << 0 }
    else
      is.pop while n < is.length
    end
    result.concat source.values_at(*is).join('')
  end
  result
end

SecureRandom.choose генерирует строку, случайным образом выбирая символы из исходного массива.

Аргумент source задаёт массив символов, из которого будет генерироваться строка. Аргумент n задаёт длину строки в символах.

Результат может содержать любые символы из исходного массива.

require 'securerandom'

SecureRandom.choose([*'l'..'r'], 16) #=> "lmrqpoonmmlqlron"
SecureRandom.choose([*'0'..'9'], 5)  #=> "27309"

Если генератор случайных чисел недоступен, генерируется исключение NotImplementedError.

gen_random(n) Показать исходный код
# File lib/securerandom.rb, line 239
        def gen_random(n)
  self.bytes(n)
end

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API