Функции генерации случайных значений и ID

В данной статье при описании функций приняты следующие обозначения:

  • Типы значений, которые принимает аргумент, указаны в угловых скобках.

  • Перечень необязательных аргументов заключается в квадратные скобки. При вызове функции квадратные скобки вводить не нужно.

  • После :: в угловых скобках указаны типы значений, которые возвращает функция.

Функции генерации случайных значений

random_bool

Возвращает случайное логическое значение.

Спецификация функции

random_bool()
:: <логическое значение>

Примеры

Случайное логическое значение

Example 1. Исходный код
is_boolean(random_bool())
Example 2. Результат
true

random_int

Возвращает случайное целое число в диапазоне [min, max).

Для более удобного синтаксиса используйте функцию rv_random_int.

Спецификация функции

random_int(min: <целое число>, max: <целое число>)
:: <целое число>, <ошибка>
Аргумент Тип Описание По умолчанию Обязателен

min

целое число

Минимальное значение (включительно)

да

max

целое число

Максимальное значение (исключительно)

да

Ошибки

Функция random_int может возвращать ошибки, для которых требуется обработка:

  • максимум не больше минимума.

Примеры

Случайное целое число от 0 до 10 (не включая 10)

Example 3. Исходный код
i = random_int(0, 10)
i >= 0 && i < 10
Example 4. Результат
true

rv_random_int

Возвращает псевдослучайное целое число в диапазоне [min, max]. Любую из границ диапазона можно опустить, по умолчанию в качестве минимума используется 0, а в качестве максимума — максимально возможное 64-битное число.

Спецификация функции

rv_random_int([min: <целое число>, max: <целое число>])
:: <целое число>
Аргумент Тип Описание По умолчанию Обязателен

min

целое число

Минимальное значение (включительно)

0

нет

max

целое число

Максимальное значение (включительно)

9 223 372 036 854 775 807

нет

Примеры

Случайное целое число от 0 до 10 (включая 10)

Example 5. Исходный код
i = rv_random_int(0, 10)
i >= 0 && i <= 10
Example 6. Результат
true

random_float

Возвращает случайное число с плавающей точкой в диапазоне [min, max).

Спецификация функции

random_float(min: <число с плавающей точкой>, max: <число с плавающей точкой>)
:: <число с плавающей точкой>, <ошибка>
Аргумент Тип Описание По умолчанию Обязателен

min

число с плавающей точкой

Минимальное значение (включительно).

да

max

число с плавающей точкой

Максимальное значение (исключительно).

да

Ошибки

Функция random_float может возвращать ошибки, для которых требуется обработка:

  • max не больше min

Примеры

Случайное число с плавающей точкой от 0.0 до 10.0 (не включая 10.0)

Example 7. Исходный код
f = random_float(0.0, 10.0)
f >= 0 && f < 10
Example 8. Результат
true

random_bytes

Криптографически стойкий генератор случайных чисел. Возвращает строковое значение, содержащее запрошенное количество случайных байтов.

Спецификация функции

random_bytes(длина: <целое число>)
:: <строка>, <ошибка>
Аргумент Тип Описание По умолчанию Обязателен

длина

целое число

Количество генерируемых байт. Должно быть не больше 64 Кбайт.

да

Ошибки

Функция random_bytes может возвращать ошибки, для которых требуется обработка:

  • длина отрицательное

  • длина больше максимального значения (64 Кбайт)

Примеры

Генерация случайных байтов в кодировке base64

Example 9. Исходный код
encode_base64(random_bytes(16))
Example 10. Результат
LNu0BBgUbh7XAlXbjSOomQ==

Функции генерации ID

uuid_v4

Генерирует случайную строку UUIDv4.

Спецификация функции

uuid_v4()
:: <строка>

Примеры

Создание UUIDv4

Example 11. Исходный код
uuid_v4()
Example 12. Результат
1d262f4f-199b-458d-879f-05fd0a5f0683

uuid_v7

Генерирует случайную строку UUIDv7. По умолчанию в качестве метки времени используется результат функции now().

Спецификация функции

uuid_v7(, [метка_времени: <метка времени> ])
:: <строка>
Аргумент Тип Описание По умолчанию Обязателен

метка_времени

метка времени

Метка времени, используемая для генерации UUIDv7.

now()

нет

Примеры

Создание UUIDv7 с меткой времени по умолчанию

Example 13. Исходный код
uuid_v7()
Example 14. Результат
06338364-8305-7b74-8000-de4963503139

Создание UUIDv7 с явно указанной now

Example 15. Исходный код
uuid_v7(now())
Example 16. Результат
06338364-8305-7b74-8000-de4963503139

Создание UUIDv7 с произвольной меткой времени

Example 17. Исходный код
uuid_v7(t'2020-12-30T22:20:53.824727Z')
Example 18. Результат
0176b5bd-5d19-7394-bb60-c21028c6152b

community_id

Генерирует ID потока данных на основе спецификации Community ID.

Спецификация функции

community_id(source_ip: <строка>, destination_ip: <строка>, protocol: <целое число>, [source_port: <целое число>, destination_port: <целое число>, seed: <целое число> ])
:: <строка>, <ошибка>
Аргумент Тип Описание По умолчанию Обязателен

source_ip

строка

IP-адрес источника.

да

destination_ip

строка

IP-адрес назначения.

да

protocol

целое число

да

source_port

целое число

Исходный порт или тип ICMP.

нет

destination_port

целое число

Порт назначения или код ICMP.

нет

seed

целое число

Произвольное входное число (seed) между 0 и 65 535.

0

нет

Ошибки

Функция community_id может возвращать ошибки, для которых требуется обработка:

  • Невозможно разобрать IP-адрес источника.

  • Невозможно разобрать IP-адрес назначения.

  • Номер протокола вне диапазона [0; 255].

  • Номер порта источника вне диапазона [0; 65535].

  • Номер порта назначения вне диапазона [0; 65535].

  • Указан seed вне диапазона [0; 65535].

Примеры

TCP

Example 19. Исходный код
community_id!(source_ip: "192.0.2.0", destination_ip: "198.51.100.0", source_port: 1122, destination_port: 3344, protocol: 6)
Example 20. Результат
1:yQ6Snpz/rq5kekU4Yqbt5zCjHWM=

UDP

Example 21. Исходный код
community_id!(source_ip: "192.0.2.0", destination_ip: "198.51.100.0", source_port: 1122, destination_port: 3344, protocol: 17)
Example 22. Результат
1:o1hyPRzWSLSK8hSMFSCDlkppQQ0=

ICMP

Example 23. Исходный код
community_id!(source_ip: "192.0.2.0", destination_ip: "198.51.100.0", source_port: 1122, destination_port: 3344, protocol: 1)
Example 24. Результат
1:mrrlg1BzCI7PkjFBx+q1431HpLg=

RSVP

Example 25. Исходный код
community_id!(source_ip: "192.0.2.0", destination_ip: "198.51.100.0", source_port: 1122, destination_port: 3344, protocol: 46)
Example 26. Результат
1:fktxP6ndCPNrcDJ2XpM5DFoWtT4=