Требования к генератору:
Источник
- Выдача псевдо-случайных последовательных номеров (уникальных для десятков миллионов записей)
- Простая проверка корректности (без обращения к БД)
Мы будем использовать сеть Фейстеля для создания псевдо-случайных чисел (только положительных) из последовательных чисел (т.е. возвращаемых при помощи nextval() для posgresql sequence). Этот алгоритм принимает базис для функции `make_feistel_number`, доступной в пакете wheezy.core.
Настройка окружения перед началом работы:
Давайте немного поиграем с генерацией чисел (обратите внимание, что функция обратима и последовательна, все числа уникальны, без повторений):
Мы будем использовать алгоритм Луна для создания контрольной цифры. Этот алгоритм доступен в пакете wheezy.core.
Есть так же полезная функция для проверки корректности полученного числа при помощи этой контрольной цифры:
Теперь давайте сделаем красивый номер счёта (с нулями для доведения до нужного количества цифр, префиксом и т.д.):
Да, этот алгоритм оптимизирован для скорости и потому Вы должны предоставить свою собственную реализацию `sample_f` для обеспечения безопасности. Код доступен здесь.
Комментариев нет:
Отправить комментарий