2011-04-14 258 views
-1

我不知道perl語言,但我試圖自定義用perl語言編寫的應用程序。我想知道下面的Perl代碼的邏輯或含義。我知道這段代碼是用於生成一個隨機字符串,但我想要它的細節,即我想知道如何在PHP中生成這個相同的隨機字符串?請任何人給我這個Perl代碼的PHP代碼!Perl - PHP:隨機字符串生成

sub generate_rand_string { 

    #warn "generate_rand_string"; 

    my $chars = shift 
     || 'aAeEiIoOuUyYabcdefghijkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789'; 
    my $num = shift || 1024; 

    require Digest::MD5; 

    my @chars = split '', $chars; 
    my $ran; 
    for (1 .. $num) { 
     $ran .= $chars[ rand @chars ]; 
    } 
    return Digest::MD5::md5_hex($ran); 
} 

請人幫我!!!!

+1

「同一個隨機字符串」不是很隨機,如果你可以重新創建它的MD5哈希的十六進制表示選擇隨機字符的字符串。所以不太確定你想要什麼。 – 2011-04-14 06:31:37

+0

@Dagon:很確定他只是想要相同的功能。 – drudge 2011-04-14 06:34:18

+1

是好的,我買了,1024個字符是殺死md5(mt_rand());可能會這樣做,或者md5(uniqid()); – 2011-04-14 06:38:35

回答

0

在PHP會是這樣的:

function generate_rand_string($chars = null, $length = 1024) { 
    if($chars == null) { 
     $chars = 'aAeEiIoOuUyYabcdefghijkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789'; 
    } 

    $rand = ''; 
    for($i = 0; $i < $length; $i++) { 
     $rand .= $chars[ rand(0, strlen($chars) - 1) ]; 
    } 

    return md5($rand); 
} 
+0

使用'array_rand()'會不會更好? – drudge 2011-04-14 06:47:53

+0

原來的perl din't,所以這只是一個嘗試儘可能接近,並不是說它是獲得隨機md5字符串的最佳方式 – 2011-04-14 06:50:51

+1

沒有原因? '$ chars'只是一個字符串。它當然不是美麗的,但他只是想將它翻譯成PHP。 – halfdan 2011-04-14 07:07:41

1

步驟,用於仿真:

  1. 接受一個字符串,並默認爲aAeEiIoOuUyYabcdefghijkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789如果沒有 柱設置
  2. 接受一個數字,默認爲1024如果沒有提供號碼
  3. 將字符串拆分爲字符
  4. 創建從上面的字符集
  5. 返回字符串