簡體   English   中英

在JavaScript中生成唯一的visitorId

[英]generate unique visitorId in JavaScript

我需要在JS中生成visitorId,最大長度為7個字符,有效字符為[0-9] [AZ],有什么想法嗎?

我幾乎可以肯定,您無法在純Javascript中做您想做的事情,因為您無法在不同的訪問者之間進行協調。

只有7個字符,可用值的范圍相對較小-我的意思是,該值足夠小,以至於客戶端對值的任何偽隨機分配幾乎肯定會很快導致沖突(請參閱生日悖論 )。

如果您嘗試通過附加訪問者首次出現的時間來解決該問題,那么通常來說 ,這是一個不錯的策略,但這會進一步影響您的熵。 如果您這次可以用四個字符編碼,那么只有3個字符可以區分在同一秒到達的客戶端(根據他們的時鍾),那么您將再次遇到沖突。

基本上,如果沒有任何一種,這將無法解決:

  • 服務器提供了一些幫助-例如,服務器在頁面中嵌入了一個種子編號,由於它是服務器端的,因此可以確保它是唯一的,您可以讓客戶端JS以某種方式將其轉換為字母數字ID。
  • 使得字符更大 -如果你可以在visitorID 64個字符,例如,你可以編碼的時間戳精確到毫秒,訪問者的IP地址,可能還有一些其他獨特的信息, 然后隨機分量。 這里發生沖突的機會可能會朝着MD5哈希沖突的機會,即可以接受的點。 (但要根據您對訪問者的了解進行計算 !)

您必須定義所需的“唯一性”,然后可以對定義您的用戶(例如IP)的“鍵”值進行md5哈希處理

如果您只想要一個隨機字符串,我通過谷歌搜索找到了此功能:

function randomString(string_length) {
    var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
    var randomstring = '';
    for (var i=0; i<string_length; i++) {
        var rnum = Math.floor(Math.random() * chars.length);
        randomstring += chars.substring(rnum,rnum+1);
    }
    document.randform.randomfield.value = randomstring;
}
function rand( min, max ) {
    if( max ) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    } else {
        return Math.floor(Math.random() * (min + 1));
    }
}

function getVisitorId() {
  var alpha = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  var id = '';
  for(var i=0;i<7i++) id+=alpha.charAt(rand(0,35));
  return id;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM