2013-01-18 94 views
3

可能重複:
Generating UNIQUE Random Numbers within a range - PHP創建唯一隨機碼 - PHP/MySQL的

我要在我的數據庫中的每個 「公司」 創造獨特的代碼。

我認爲這是可能的唯一方法是與rand()創建一個隨機數,然後檢查該數字是否存在於數據庫中的「公司」,如果它重新創建。

我的問題是:沒有更好的方法來做到這一點 - 一種更有效的方法。就好像我正在創建10 000個代碼一樣,數據庫中已經有500 000個代碼,它將逐步變得越來越慢。

任何想法或提示可能是更好的方式來做到這一點?

編輯:

對不起,也許我可以更好地解釋。這些代碼不會同時生成,只要每天/每月/每年創建一次。

而且,我需要能夠定義例如,字母數字小的碼或數只

+1

請參閱http://stackoverflow.com/questions/5612656/generating-unique-random-numbers-within-a-range-php希望這將你 – Roopendra

+0

是否必須代碼?你能在mysql中使用AUTO_INCREMENT嗎? 如果不是,你可以嘗試一個具有足夠多的數字的隨機數(即那麼大,以至於它會花費很長時間纔會降低系統的速度) 第三種情況是將隨機數與隨機挑選的角色爲更多的可能性和更少的機會讓系統變慢。 –

+0

這不是一個獨特的。另一個問題是關於只生成隨機NUMBERS。兩種答案都非常不同。 –

回答

5

我建議您使用「通用唯一標識符」的特點:http://en.wikipedia.org/wiki/Universally_unique_identifier來生成隨機碼每家公司。這樣就可以避免檢查你的數據庫副本:

任何人都可以創建一個UUID並用它來識別與 合理的信心,同樣的標識將永遠 任何人無意中產生,以確定一些別的東西。 因此,用UUID標記的信息可以稍後組合成單個數據庫,而無需解析標識符(ID)衝突。

在PHP中您可以使用函數uniqid用於此目的:http://es1.php.net/manual/en/function.uniqid.php

+2

使用Uuid是一個很好的建議,但請記住,PHP的函數'uniqid()'不會生成真實的Uuid,而是會生成一個基於microtime的值,其空間可能更小(Uuid具有128位) 。 – martinstoeckli

+0

是的,我知道uniqid()不會生成真正的UUID。還有其他幾個實現,像這個PECL包:http://pecl.php.net/package/uuid – m4t1t0

0

如果代碼僅僅是整數,然後使用自動增量或獲取當前最大值,並開始增加它