|
Допустим, у нас есть стабильный идентификатор пользователя userId. С помощью этой функции мы превращаем строковый идентификатор в псевдослучайное число: int userNumber = stringIdToSamplingMillis(userId); Теперь мы можем использовать это число так: if (userNumber < 50) ... // Пользователь попал в 5% тестовую выборку if (userNumber < 500) ... // Пользователь попал в категорию A else ... // Пользователь попал в категорию B Функция:
// Генерирует по строке псевдослучайное число от 0 до 999 включительно.
private static int stringIdToSamplingMillis(final String str) {
// Используем MD5 в качестве генератора псевдослучайного числа на базе строки
final MessageDigest hasher = MessageDigest.getInstance("MD5");
final byte[] data = str.getBytes();
hasher.update(data, 0, data.length);
// Получим MD5 в виде длинного целого числа
final BigInteger bigInt = (new BigInteger(hasher.digest())).abs();
// Получим хвост длинного целого в виде обычного int-а [0..999]
return bigInt.mod(BigInteger.valueOf(1000)).intValue();
}
Tags: Программирование.
Archives
|
