Toni2708
Toni2708

Reputation: 119

UserID Function JavaScript

I'm trying to generate a UserID out of userAgent and Date Function. I also wanted to understand callback function (which I still didn't get (JS Noob)). Therefore I built the following example:

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);

The result should look like this "9834917834|8293479273" (example numbers to show format). First number hashed agent second number hashed date. I got the hash logic form here: http://mediocredeveloper.com/wp/?p=55

Maybe there is a better way to do this :)

I really appreciate your help!

Thanks a lot!

Best, Anton

Upvotes: 1

Views: 73

Answers (1)

Jonas Wilms
Jonas Wilms

Reputation: 138257

You should extract the hashing loop into a new function:

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();
}

So to get the hash you want to you just need to call it twice:

function getUserID(){
  return hash(window.navigator.userAgent) + "|" + hash("" + new Date);
}

(PS: you know that new Date will change every millisecond?)

Upvotes: 1

Related Questions