我正在尝试从userAgent和Date函数中生成一个UserID。我还想了解回调函数(我仍然不理解它(JS Noob))。因此,我构建了以下示例:
var storage = window.localStorage;
var storageUserId = storage.getItem("userID");
var text = "";
function userID(callback){
var agent = window.navigator.userAgent;
var now = new Date();
try{
callback(agent, now);
}catch(e){}
}
function hasher(agent,now){
var hash = 0;
var arr = [];
for(var i = 0; i < arguments.length; i++){
var pars = arguments[i];
for(var j = 0; j < pars.length; j++){
var charI = pars.charCodeAt(j);
hash = ((hash<<5)-hash)+charI;
hash = hash & hash; // Convert to 32bit integer
hash = hash.toString();
}
}
console.log(hash + "|" + hash);
}
userID(hasher);结果应该类似于"9834917834|8293479273“(显示格式的示例数字)。第一个数字散列座席第二个数字散列日期。我在这里得到了散列逻辑形式:http://mediocredeveloper.com/wp/?p=55
也许有一种更好的方法可以做到这一点:)
我真的很感谢你的帮助!
非常感谢!
最好的,安东
发布于 2018-02-02 18:24:24
您应该将散列循环提取到一个新函数中:
function hash(str){
var hash = 0;
for(const char of str){
const charCode = char.charCodeAt(0);
hash = ((hash<<5)-hash)+charCode;
}
hash = hash & hash; // Convert to 32bit integer
return hash.toString();
}因此,为了得到你想要的散列,你只需要调用它两次:
function getUserID(){
return hash(window.navigator.userAgent) + "|" + hash("" + new Date);
}(PS:你知道new Date每毫秒都会改变吗?)
https://stackoverflow.com/questions/48580444
复制相似问题