Как преобразовать строку, например. идентификатор пользователя плюс соль к случайной, но на самом деле детерминистически повторяемой равномерной вероятности в полуоткрытом диапазоне [0,0, 1,0)? Это означает, что результат равен ≥ 0,0 и ‹ 1,0. Выходное распределение должно быть равномерным независимо от входного распределения. Например, если входная строка — «a3b2Foobar», выходная вероятность может быть равна 0,40341504.
Желательна межъязыковая и кроссплатформенная алгоритмическая воспроизводимость. Я склонен использовать хеш-функцию, если нет лучшего способа. Вот что у меня есть:
>>> in_str = 'a3b2Foobar'
>>> (int(hashlib.sha256(in_str.encode()).hexdigest(), 16) % 1e8) / 1e8
0.40341504
Я использую последнюю стабильную версию Python 3. Обратите внимание, что этот вопрос похож, но не совсем идентичен связанному вопросу с преобразовать целое число в случайный, но детерминистически повторяемый выбор.