生成一个随机的10位数字并插入mysql


Generate a random 10 digit number and insert into mysql?

我试图生成一个随机的10位数字,并在页面加载时将其插入mysql中,因此每次刷新或加载页面时,都应该有一个不同的10位号码插入数据库,但目前它只是一次又一次地插入相同的10位编号。

有人能告诉我哪里出了问题吗?谢谢

<?php
    session_start();
    $db_hostname = 'localhost';
    $db_database = 'hewden1'; 
    $db_username = 'root';
    $db_password = '';
    $db_server = mysql_connect($db_hostname, $db_username, $db_password)    
            or die("Unable to connect to MySQL: " . mysql_error());
    mysql_select_db($db_database)   
    or die("Unable to select database: " . mysql_error());
    $num0 = (rand(10,100));
    $num1 = date("Ymd");
    $num2 = (rand(100,1000));
    $num3 = time();
    $randnum = $num0 . $num1 . $num2 . $num3;

    $sql="INSERT INTO supplier_session (session_number)
    VALUES ('$randnum')";
    $result = mysql_query($sql); 
    ?>

这是我经常得到的数字:2147483647

尝试获取十位数且无

$randnum = rand(1111111111,9999999999);

您需要更改列类型。您尝试插入的数字高于列最大值(在您的情况下为SIGNED INT-2147483647)

SIGNED INT - 2147483647
UNSIGNED INT - 4294967295
SIGNED BIGINT - 9223372036854775807
UNSIGNED BIGINT - 18446744073709551615

您得到的是2147483647,因为它是存在的最高有符号32位整数(二进制,它是1111111111111111111111111111111)。这也是常数CCD_ 3的内容。

只需使用带循环的字符串和mt_rand()函数:

<?php
for ($randomNumber = mt_rand(1, 9), $i = 1; $i < 10; $i++) {
    $randomNumber .= mt_rand(0, 9);
}
var_dump($randomNumber); //eg. string(10) "9152676628"

DEMO

如果您愿意,也可以尝试一下。它不是生成随机数,而是生成随机字符串

private string generaterandomnumber()
        {
            string Rand1 = RandomString(8);
            string Rand2 = RandomString(8);
            docNum = Rand1 + "-" + Rand2;
            MD5 md5 = new MD5CryptoServiceProvider();
            md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(docNum));
            //get hash result after compute it
            byte[] result = md5.Hash;
            StringBuilder strBuilder = new StringBuilder();
            for (int i = 0; i < result.Length; i++)
            {
                //change it into 2 hexadecimal digits
                //for each byte
                strBuilder.Append(result[i].ToString("x2"));
            }
            return strBuilder.ToString();
        }

不需要投票否决!!!Thx

您应该考虑使用mt_rand函数,因为它提供了更好的分布范围。

在您的代码中,您没有使用完整的10位数字范围,请尝试类似的操作

$MIN_SESSION_ID = 1000000000;
$MAX_SESSION_ID = 9999999999;
$randId = mt_rand($MIN_SESSION_ID, $MAX_SESSION_ID);
echo $randId;

使用此代码。

$x = 10; // Amount of digits
$min = pow(10,$x);
$max = pow(10,$x+1)-1);
$value = rand($min, $max);

使用php mt_rand()函数而不是rand()

<?php
echo mt_rand();
?>
function random_num ($len)
{
 $ch = "0123456789";
 $l = strlen ($ch) - 1;
 $str = "";
 for ($i=0; $i < $len; $i++)
 {
     $x = rand (0, $l);
     $str .= $ch[$x];
 }
 return $str;
}

您的数字生成代码没有问题。尝试在定义变量之前取消设置变量,看看它是否能解决问题。

unset($num0, $num1, $num2, $num3);
$num0 = (rand(10,100));
$num1 = date("Ymd");
$num2 = (rand(100,1000));
$num3 = time();
$randnum = $num0 . $num1 . $num2 . $num3;

您可以使用以下代码轻松地使用rand函数生成10位数字:rand(1111111111,9999999999)

当我运行脚本时,每次都会得到不同的数字。为什么不使用uniqid()函数呢?

以下是生成10位随机数的简单方法

<?php
function generateRandomNumber($length = 10) {
    $number = '1234567890';
    $numberLength = strlen($number);
    $randomNumber = '';
    for ($i = 0; $i < $length; $i++) {
        $randomNumber .= $number[rand(0, $numberLength - 1)];
    }
    return $randomNumber;
}
echo generateRandomNumber();
?>

当你生成这个密钥/数字时,这是最合适的方法

echo $key = time(); 

它的10位数字将其转换为准确的日期和时间。