对于新功能的软推出,我希望我的服务器保存功能标志以返回百分比数字,然后让客户端确定它所在百分比的哪一侧。我想使用user-id一致地做出这个选择,这样单个用户总能看到标志的同一面。
我已经到了
(crypto.createHash('md5').update(userID).digest('hex').charCodeAt(0)
哈希ID(将是一些大字符串),然后获取哈希的第一个字符并将其转换为整数id。不幸的是,这个数字似乎不是一个随机分布,所以即使我移动并乘以它总是在0到100之间,它也不会随机均匀。以下是我运行的随机字符串的一些哈希:
checking 25
15.2
checking 26
96.89999999999999
checking 27
98.8
checking 28
13.299999999999999
checking 29
15.2
checking 30
102.6
checking 31
15.2
checking 32
7.6
checking 33
102.6
checking 34
15.2
checking 35
102.6
checking 36
15.2
checking 37
7.6
checking 38
96.89999999999999
checking 39
96.89999999999999
checking 40
7.6
checking 41
100.69999999999999
checking 42
13.299999999999999
checking 43
96.89999999999999
checking 44
93.1
checking 45
96.89999999999999
checking 46
1.9
checking 47
15.2
checking 48
有没有更好的方法来进行此项检查,以便创建百分比的随机分布?
答案 0 :(得分:0)
我想出了这个,看起来效果很好:
parseInt(crypto.createHash('md5').update(flagName+ userID).digest('hex'), 16).toString().substring(4, 6)
这有点疯狂,但似乎运作良好。 ParseInt创建一个巨大的数字,然后我从小数内抓取数字。
checking D
17
checking N
23
checking F
17
checking J
30
checking Z
76
checking L
20
checking N
23
checking X
50
checking L
20
checking F
17
checking H
67
checking U
52
checking H
67
checking 3
75
checking 8
42
checking 2
00
checking 9
37
checking 3
75
checking 5
19
checking 0
21
checking 1
57
checking 3
75
checking 9
37
checking 4
97
checking 5
19
checking 0
21
checking d
42
checking k
27
checking l
77
checking z
53
checking i
59