随机函数及应用

2019-12-25  本文已影响0人  千寻未雪

随机函数及应用

  1. rand 产生一个随机整数

    echo rand(1, 100); // 生成一个 1-100 之间的随机数
    
  2. uniqid 生成一个唯一ID

    echo uniqid();
    echo uniqid('prefix', true);
    echo uniqid('', true);
    
    /*
    string uniqid ( [ string $prefix = "" [, bool $more_entropy = false ]] )
    获取一个带前缀、基于当前时间微秒数的唯一ID。
    
    $more_entropy 设置为true 会提高唯一性。
    prefix为空,则返回的字符串长度为13。more_entropy 为 TRUE,则返回的字符串长度为23。
    */
    
  3. 概率计算

    // 计算10%的概率
    if( rand(1,100) <= 10 ) echo "10%";
    
    // 计算任意概率
    $rate = 0.123; // 0-1之间的小数
    $max = pow(10, strlen($rate)-2);
    
    if( rand(1, $max) <= $rate*$max ) {
        echo $rate;
    }
    
  4. 生成一个由数字字母组成,指定长度的字符串

    $len = 10;
    $str = '';
    for($i = 0; $i < $len; $i++) {
        $str .= rand(0, 35) < 10 ? chr(rand(48, 57)) : chr(rand(65, 90));
    }
    echo $str;
    
    // chr 将一个ASCII码转换为字符串,ASCII 48-57 对应0-9,65-90对应大写A-Z
    
  5. 生成一个唯一字符串ID,带服务器IP和用户IP信息

    function createUniqid() {
        $serverIp = isset($_SERVER['SERVER_ADDR']) ? $_SERVER['SERVER_ADDR'] : '127.0.0.1'; // 获取服务器IP
        $userIp = isset($_SERVER['REMOAT_ADDR']) ? $_SERVER['REMOAT_ADDR'] : '127.0.0.1'; // 获取用户端IP
        // 将IP转换为字符串
        $serverIp = base_convert(ip2long($serverIp), 10, 36);
        $userIp = base_convert(ip2long($userIp), 10, 36);
        // 生成一个 uniqid,去掉里面的'.',然后用进制转换为字符串
        $uniqid = uniqid('', true);
        $uniqid = base_convert(str_replace('.', '', $uniqid), 16, 36);
    
        return $serverIp.'-'.$userIp.'-'.$uniqid;
    }
    echo createUniqid();
    
上一篇下一篇

猜你喜欢

热点阅读