[英]Selecting info from multiple tables for one unique ID with PHP and MySQL
[英]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.