Javascript 为cookie键创建随机指数值
使用这样的代码可以得到长度为17的字符串吗? 我们正在将cookie保存到客户端的浏览器中,然后从此浏览器获取cookieJavascript 为cookie键创建随机指数值,javascript,string,random,pow,floor,Javascript,String,Random,Pow,Floor,使用这样的代码可以得到长度为17的字符串吗? 我们正在将cookie保存到客户端的浏览器中,然后从此浏览器获取cookie function getPartnerVisitorId() { var pvid = cookies.get('pvid') || Math.floor(Math.random() * Math.pow(10, 15)).toString(); cookies.setOnRoot('pvid', pvid, 365 * 24 * 60 * 60);
function getPartnerVisitorId() {
var pvid = cookies.get('pvid') || Math.floor(Math.random() * Math.pow(10, 15)).toString();
cookies.setOnRoot('pvid', pvid, 365 * 24 * 60 * 60);
return pvid;
};
我们认为“pvid”的最大长度应该是16位,但有时(大约占cookie的5%)我们会得到17位长度的cookie
我们还注意到,所有奇怪的cookie都是偶数,其中大多数(75%)的最后一个数字是零您要处理的问题与IEEE 754浮点数的性质有关-在JavaScript中用于保存
数字
,在Java和C中用于保存双
,这些数字存储在一种科学符号中,以
[+/-]1.[some value]*2^[some other value]
这会得到大约15个有效的十进制数字,它们特别擅长表示2的幂
通过将Math.random()
乘以Math.pow(10,15)
,此方案将遇到两个问题:
- 您的数字已用完,因此会截断底部的最后几个数字(因此,您的数字总是偶数)
- 您试图表示10的幂,但它不能始终准确地表示(因此,您有时会得到17位数字的键)
- 将
乘以Math.random()
(其中Math.pow(2,x)
是一个用于寻找正确长度的数字)-2^任何东西都可以用浮点数累加表示x
- 在
方法中,插入一个2的幂的整数参数(例如8或16)-这将导致数字转换为带base-8或base-16数字系统的字符串。这将防止变长关键点,也将防止舍入toString()
var pvid=cookies.get('pvid')|| Math.floor(Math.random()*Math.pow(8,15)).toString(8)代码>这很有道理,thanx。但是我已经运行了以下代码'Math.floor(Math.random()*Math.pow(10,15)).toString();'经过数百万次迭代,没有得到任何17位甚至16位长度的数字。它是如何依赖于浏览器的版本或类似的东西的?对于他的问题,还有一个愚蠢的解决方案,我想这对它的问题来说已经足够好了:Math.random().toString().substr(2,16)
@nemoino-因为这是一个根本不同的解决方案,你可以把它作为一个答案而不是一个评论。