PHP生成随机数,不带0或00的开头

时间:2016-08-23 13:45:15

标签: php function random

我创建了一个生成random number的功能,但我想从此号码中移除 0 ,我想开始这个数字任意数字不同指向 0

我的代码:

function createRandomNumber() {
    $chars = "07659242202345640248765924276987346549823433445754767659242599";
    srand ( ( double ) microtime () * 1000000 );
    $i = 0;
    $pass = '';
    while ( $i <= 7 ) {
          $num = rand () % 33;      
          $tmp = substr ( $chars, $num, 1 );
          $pass = $pass . $tmp;
          $i ++;
    }
    return $pass;
}

2 个答案:

答案 0 :(得分:0)

您可以使用默认的随机数功能,即

<?php
mt_rand(1,7000);
?>

PHP Manual page

  

注意:以下内容并不安全,在生成所需输出时,这绝不是密码安全号码生成器,例如random_int()

如果您从安全性的角度寻找安全的东西,那么开发自己的功能是一种选择。你可以保持你的功能不变,如果第一个字符为“0”,只需要替换字符串。

function createRandomNumber() {
    $chars = "07659242202345640248765924276987346549823433445754767659242599";
    srand ( ( double ) microtime () * 1000000 );
    $i = 0;
    $pass = '';
    while ( $i <= 7 ) {
          $num = rand () % 33;      
          $tmp = substr ( $chars, $num, 1 );
          $pass = $pass . $tmp;
          $i ++;
    }
    if($pass[0] == "0" ) {$pass = substr( $pass, 1);}
        return $pass;
    }
}

答案 1 :(得分:0)

这是你想要的吗?我对您的代码(注释行)进行了2次更改。

function createRandomNumber() {
    $chars = "07659242202345640248765924276987346549823433445754767659242599";
    srand ( ( double ) microtime () * 1000000 );
    $i = 0;
    $pass = '';
    // Loop until $pass has 8-characters
    while ( strlen($pass) < 8 ) {
          $num = rand () % 33;      
          $tmp = substr ( $chars, $num, 1 );
          // avoid leading '0'
          if (strlen($pass) === 0 && $tmp === '0') continue;
          $pass = $pass . $tmp;
          $i ++;
    }
    return $pass;
}

希望这有帮助。