簡體   English   中英

如何通過一長串用戶信息在PHP中創建唯一ID

[英]How to create a unique ID in PHP from a long string of user info

我正在通過磁刷從用戶的徽章讀取一些數據。 它帶回一個長而唯一的文本字符串,其中包括用戶的證章編號,他們的姓名以及其他一些信息。 我希望能夠通過滑動來獲取用戶的信息。 我當時正在考慮從用戶數據中提取MD5哈希值,但是我不確定MD5在該刷卡操作中有多獨特,因此我可以像在MySQL數據庫中查找用戶一樣存儲該md5嗎?

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

MD5 可能有沖突。 但是,為什么不能簡單地將徽章編號用作主鍵呢?

MD5是一個128位的哈希,因此它允許2 128 (340.282.366.920.938.463.463.374.607.431.768.211.456)唯一標識符,因此,如果這個世界上的每個蜜蜂(大約6.900.000.000)都應該獲得一個md5唯一根據此數據建立的標識符,發生碰撞的機會小於1:4 * 10 28 因此它應該足夠小。

如果您對此感到擔心,那么如何使用更可靠的哈希呢? 嘗試使用Sha-512,SHA-384或Whirlpool。 與較舊的哈希函數相比,所有這些字符都使用更多的字符,並且可以保證提供更多的獨特排列選擇。

查看PHP 哈希文檔 ,特別是hash命令本身和算法列表 就像$really_unique_id=hash('whirlpool',$data);一樣簡單$really_unique_id=hash('whirlpool',$data);

當然,如果您要選擇它或將其作為數據庫字段建立索引,這可能會顯得過大,最終效率會降低。 正如另一個答案所建議的那樣,使用像徽章ID這樣已經獨特的標識符可能是更好的選擇。

我當時在考慮從用戶數據中提取MD5哈希值,但是我不確定MD5的獨特性

如果要存儲整個哈希,那么它將對您的應用程序來說足夠獨特。 不久前,我做了一些實驗 ,發現即使是MD5或SHA-1哈希的32位片段,對於幾千條記錄而言仍然可能是唯一的。

您能否在查詢中實際使用徽章數據?

例如:

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

為了創建唯一的ID,您可以使用任何算法,例如md5或SHA或Whirlpool。 我的想法基於各種網站在單擊“忘記密碼”並收到電子郵件時用於生成隨機密碼的方法。 另一種情況是為驗證碼生成字符串。

為此,他們通常在電子郵件中創建哈希,並在其中使用隨機子字符串。 但是要確保具有最小重復ID的機會,您可以使用完整的哈希字符串。 與電子郵件類似,它通常有利於散列該字段,每個用戶最有可能是唯一的,例如用戶名,employeeID等。

我認為這有所幫助。

暫無
暫無

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

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