2017-08-13 43 views
0

我試圖編寫一個包含小寫/大寫字母,數字和符號的8個字符的JavaScript GUID生成器。我找到了這些解決方案,但需要解釋每個解決方案的情況。最初我以爲我需要一個字符串來存放所有的字母/數字/符號,這些字母/數字/符號可以用隨機數函數索引來建立一個新的GUID,但是這些解決方案似乎都是憑空創造出數字/字母/符號。Javascript GUID(全局唯一標識符)生成器說明

在解決方案1中,「1+」和「0x10000」的用途是什麼? 「.toString(16)」和「.substring(1)」的用途是什麼?它是如何通過這一小段代碼生成數字/符號/ AND字母的?

解決方案1:

function guid() { 
    function s4() { 
    return Math.floor((1 + Math.random()) * 0x10000) 
     .toString(16) 
     .substring(1); 
    } 
    return s4() + s4() + '-' + s4() + '-' + s4() + '-' + 
    s4() + '-' + s4() + s4() + s4(); 
} 

在溶液2中,我看到的GUID如何爲32個字符長,但不明白爲什麼的Math.random被乘以特異性 「16」,用一個toString(16 )附加,但這次沒有「.substring(x)」?

解決方案2:

function generateGuid() { 
    var result, i, j; 
    result = ''; 
    for(j=0; j<32; j++) { 
    if(j == 8 || j == 12|| j == 16|| j == 20) 
     result = result + '-'; 
    i = Math.floor(Math.random()*16).toString(16).toUpperCase(); 
    result = result + i; 
    } 
    return result; 
} 

無需解釋GUID的結構,也不是什麼連字符是XD

任何及所有詳細的說明表示讚賞!

+0

[Number.prototype.toString](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString) – Pointy

+1

不確定是否重要,但這不是一個GUID ..這只是僞隨機字符序列 – Slai

回答

1

在第二種情況下,Math.random()會生成一個位於0(包含)到1(不包含)之間的數字。
現在如果我想要一個應該是< 16的數字,將16與[0,1)中的值相乘應該爲我完成這項工作,toString(16)將它轉換爲基數爲16的數字。我們添加32個這樣的數字整體

的第一示例生成2.0之間的數(1.0,]並用(10^4)乘以它對於底座16現在我們已經在範圍(10000,20000]基數的數字16

採取的最後4位數字應該能滿足我們,以便我們採取相關子出來的。
既然如此,我認爲

Math.floor((Math.random()) * 0x10000) 
    .toString(16) 

也就夠該解決方案,因爲我們需要一個4位數字六