2010-08-28 13 views
0

我正在通過磁條讀取用戶徽章中的某些數據。它帶回一個很長的獨特文本字符串,其中包括用戶的徽章號碼,他們的名字以及一些其他信息。我希望能夠通過他們的滑動來提取用戶的信息。我正在考慮從用戶數據中創建一個MD5散列表,但我不確定MD5在這個刷卡中有多獨特,所以我可以將這個md5存儲爲我在MySQL數據庫中查找用戶的方式。如何使用用戶信息的長字符串在PHP中創建唯一ID

***更新:對不起,我應該補充一點,徽章不一定來自我們。它可能來自另一家公司,所以我只需要拿出徽章上的內容並從中創建一個唯一的ID。

回答

1

MD5是一個128位的散列值,所以它允許2 (340.282.366.920.938.463.463.374.607.431.768.211.456)唯一標識符,因此,如果這個世界上每個人beeing(約6.900.000.000 )應該得到一個由此數據構成的md5唯一標識符,碰撞的機率小於1:4 * 10 。所以它應該足夠小。

4

MD5 有碰撞。但是,爲什麼你不能簡單地使用徽章號碼作爲主鍵?

+0

+ 1表示'徽章號碼爲主鍵'。 – rochal 2010-08-28 18:01:47

+0

對不起,我應該補充一點,徽章不一定來自我們。它可能來自另一家公司,所以我只需要採取徽章上的內容並從中創建唯一標識符。 – muncherelli 2010-08-28 19:01:26

+1

但它是你的數據庫,對吧?所以如果徽章有獨特的ID,那就好了。如果他們沒有,但不太可能發生衝突,您仍然可以使用相同的徽章ID對所有用戶進行索引,並嚴重縮小搜索空間。 – bitmask 2010-08-28 21:38:56

0

我想製作一個MD5哈希了用戶的數據,但我不知道的MD5將如何唯一是

如果你要存儲整個哈希,然後它對於你的應用來說足夠獨特。我回過頭做了一個little experiment,發現即使MD5或SHA-1散列的32位碎片也可能是仍然對於幾千條記錄是足夠獨特的。

1

如果您擔心這一點,那麼使用更強大的哈希如何?也許試試Sha-512,SHA-384或Whirlpool。這些都比舊的散列函數使用更多的字符,並保證提供更多的獨特排列選擇。

查看PHP hash docs,特別是hash command本身和list of algorithms。就像$really_unique_id=hash('whirlpool',$data);

當然,如果你選擇這個數據庫字段作爲數據庫字段,它可能會矯枉過正並且效率不高。正如另一個答案所建議的那樣,使用像徽章ID這樣已經唯一的標識符可能是更好的選擇。

0

難道你沒有在事實上在你的查詢中使用徽章數據。

例如:

SELECT * from 'users' WHERE badge_num='00001' AND name='Katy Perry'

0

爲了創建一個唯一的IDü可以用任何算法去,無論是MD5,SHA或惠而浦或。我的想法是基於各種網站使用的方法來生成一個隨機的密碼,當我們點擊'忘記密碼',我們收到一封電子郵件。另一種情況是爲驗證碼生成字符串。

爲此,他們通常在他們的電子郵件中創建哈希,並使用一個隨機的子串。但要確保重複ID的可能性很小,您可以使用完整的哈希字符串。類似於電子郵件,它通常有利於散列最可能對每個用戶唯一的字段,可能像用戶名,職員ID等。

我認爲這有幫助。

相關問題