Math.random()和" hexChars" PHP等价物

时间:2012-11-20 08:33:28

标签: php javascript

我正在尝试将JavaScript转换为php,但我不确定如何将以下JavaScript函数中的Math.random()hexChars方法转换为PHP,感谢您的帮助

JavaScript功能:

    function generateId(){
        var a=[],b;
        a[8]=a[13]=a[18]=a[23]="-";
        a[14]="4";

        for(i=0;i<36;i++)
        if(!a[i]){
            b=0|Math.random()*16;
            a[i]=hexChars[i==19?b&3|8:b]
        }
        return a.join("")       
    }

PHP函数到目前为止我转换了:

function generateId(){
    $a = array();
    $a[8]=$a[13]=$a[18]=$a[23]="-";
    $a[14]="4";
    for($i=0;$i<36;$i++){
        if(!$a[$i]){
        // not sure what to do here 
        }
    }
}

编辑: 它会创建一个这样的字符串:902EA4DD-5445-4435-93F2-2A5203818255

3 个答案:

答案 0 :(得分:2)

我假设hexChars是十六进制字符数组。

<?php
    function generateId(){
        $hexChars = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F');
        $a = array();
        $a[8] = $a[13] = $a[18] = $a[23] = "-";
        $a[14] = "4";
        for ($i=0; $i < 36; $i++)
            if (!isset($a[$i]))
                $a[$i] = $hexChars[mt_rand(0,15)];
        ksort($a);
        return implode($a);
    }
    echo generateId();
?>

演示:http://phpfiddle.org/main/code/je3-6zc

答案 1 :(得分:2)

我会重做整个事情:

function generateId() {
    $id = md5(mt_rand());
    return substr($id, 0, 8) . '-' . substr($id, 9, 4) . '-' 
        . substr($id, 13, 4) . '-' . substr($id, 17, 4) . '-'
        . substr($id, 21, 4) . '-' . substr($id, 25);
}

You can play around包含您用于md5()函数的数据,如果您需要更多熵,但这应该可以让您开始。

答案 2 :(得分:2)

b = 0|Math.random()*16;

返回0到15之间的随机整数。等效的PHP代码是

$b = rand(0,15);

http://php.net/manual/en/function.rand.php


a[i]=hexChars[i==19?b&3|8:b]

hexChars是一个数组。在PHP中,您可以使用数组表示法从字符串索引字符:

$hexChars = "0123456789ABCDEF"