2012-07-30 37 views
1

我正在爲一個客戶端工作,他想要像T56,N78,J89等格式[char] [int] [int]生成的代碼... char必須是大寫。我剛剛在PHP中寫了一個隨機數生成器,你認爲這可以改進嗎?

作爲一個匆匆我,因爲我發現它最簡單的

function randomizer(){ 
    $chars = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"); 
    return $chars[array_rand($chars)].mt_rand(10, 99); 
} 

但我一直在想,會有很多其他有效的解決方案寫了這個功能。上面的這個只是起作用,但我更加關注效率,因爲我需要生成大量這樣的代碼。

還有什麼更好的開始!

+1

'$ =字符範圍( 'A', 'Z');' – zerkms 2012-07-30 20:21:21

+3

** **靜態'$ =字符範圍( 'A', 'Z');' – nickb 2012-07-30 20:22:30

+0

是否喜歡「T05值'允許?你的功能不會生成它們。 – Wug 2012-07-30 20:22:42

回答

1
echo chr(mt_rand(65,90)).str_pad((rand()%100),2,0,STR_PAD_LEFT); 
+0

效率更高......我的代碼有錯誤,因爲它沒有生成像T07這樣的代碼... – whizzzkid 2012-07-31 15:59:42

0

如果可以,您希望在函數的外部存儲$chars,所以不需要每次都創建它(例如,如果您想在循環中生成1000個代碼)。

而且,這裏是

$chars = range("A","Z");

0
function getRandStr() 
{ 
    return sprintf("%s%02d", chr(mt_rand(65, 90)), mt_rand(0, 99)); 
} 

你編輯的快捷方式:根據意見改變了,由於@DaveRandom。

+1

我想你後來忘了'chr()'的第一部分,並且由於'ord('A')''和'ord('Z')'永遠不會改變,所以最好對整數進行硬編碼。另外,我認爲'sprintf('%02s',mt_rand(0,99))'對第二部分 – DaveRandom 2012-07-30 20:26:27

相關問題