2012-10-09 47 views
2

我發現下面的JavaScript函數another answerPHP驗證有效的UUID

function createUUID() { 
    var s = []; 
    var hexDigits = "abcdef"; 

    for (var i = 0; i < 36; i++) { 
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); 
    } 

    s[14] = "4"; 
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); 
    s[8] = s[13] = s[18] = s[23] = "-"; 

    var uuid = s.join(""); 
    return uuid; 
} 

這將創建一個RFC有效的UUID/javascript中的GUID ..我想知道的是,如果有一種方法來驗證字符串一旦它到達PHP端。我發現了一個正則表達式,將潛在的大致驗證一切,格式爲真:

/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/

,但使用的是隻要你指定的長度相等的字符串和格式,將通過驗證。

有沒有什麼辦法給JavaScript函數添加某種種子,然後驗證在PHP中是否有方法讓PHP驗證傳遞的數字是否與正確的格式匹配?

任何幫助,非常感謝。

+0

什麼是「正確的格式」? – AndreKR

+0

我試圖模仿v4 UUID。抱歉應該指定。 – Peter

回答

8

根據Wikipedia UUID V4的格式是:

版4點的UUID具有形式XXXXXXXXXXXX-4XXX-YXXX-XXXXXXXXXXXX 其中x是任意十六進制數字,y是8之一,9 ,A或B f47ac10b-58cc-4372-a567-0e02b2c3d479

對應的正則表達式是:

/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i 
+0

我的這個主要問題,也許我不需要v4的UUID,如果我要採取該字符串'f47ac10b-58cc-4372-a567-0e02b2c3d479'並更改任何1個元素,只要它不是4或8,9,字符20中的A或B是否仍然有效?我必須想象。我想知道是否有種種子的方法,所以它仍然是有效的v4 UUID,但服務器端我仍然可以驗證它實際上來自我的應用程序。 – Peter

+0

它完全是隨機的。如果您正在尋找公鑰/私鑰簽名,在一個新問題中描述您的應用程序,這與UUID無關。 – AndreKR

+0

完全脫離主題,但你會建議做什麼/你會怎麼做某種公鑰/私鑰,可以通過http傳輸? – Peter

1

我用regex驗證用繩子沿驗證檢查,如果給定的字符串是有效的UUID格式。

if (!is_string($uuid) || (preg_match('/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/', $uuid) !== 1)) { 
    return false; 
} 

您可以看到完整的要點here