第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用 PHP 隨機(jī)變量長(zhǎng)度 bigint(8) 數(shù)字?

使用 PHP 隨機(jī)變量長(zhǎng)度 bigint(8) 數(shù)字?

PHP
開(kāi)滿天機(jī) 2023-10-21 16:01:02
使用 php7,我想生成一個(gè)隨機(jī)變量長(zhǎng)度無(wú)符號(hào) bigint(8) 數(shù)字 - 介于 1 和 18446744073709551615 之間
查看完整描述

2 回答

?
吃雞游戲

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

簡(jiǎn)短的回答,gmp_random_range():

$from = 0;

$to = '18446744073709551615';

$random = gmp_random_range($from, $to);

var_dump($random, (string)$random);

例如:


object(GMP)#1 (1) {

? ["num"]=>

? string(20) "10366718409313808674"

}

string(20) "10366718409313808674"

補(bǔ)充題外話:

  • MySQL 的BIGINT是一個(gè) 8 字節(jié)整數(shù),如果有符號(hào)則表示-2?63到 2?63?-1 ,如果無(wú)符號(hào)則表示 0 到 2?64?-1。

  • PHP_INT_MAX在 32 位版本中是 4 字節(jié)值,但在 64 位版本中是 8 字節(jié)值。無(wú)論哪種情況,都會(huì)簽署。

因此,如果您可以安全地假設(shè) 64 位 PHP 并且您想要有符號(hào)的數(shù)字,那么您基本上就可以完成任何隨機(jī)生成函數(shù)。如果您需要加密安全數(shù)字,則可以使用random_int() ,否則可以使用mt_rand():

var_dump(random_int(0,?PHP_INT_MAX));var_dump(mt_rand(0,?PHP_INT_MAX));

但你想要無(wú)符號(hào)值,因此你必須切換到字符串。一旦到達(dá)那里,一個(gè)明顯的方法是生成兩個(gè)整數(shù)并將它們連接為字符串 - 棘手的部分是確保不會(huì)溢出范圍。作為替代方案,您可以使用 GMP 任意精度擴(kuò)展,它有一個(gè)專用功能。

PS你實(shí)際上提到了BIGINT(8)。8 只是從兼容客戶端打印時(shí)的顯示尺寸,它不代表存儲(chǔ)范圍,也不會(huì)以任何方式強(qiáng)制執(zhí)行。由于您明確表示期望最多 20 位數(shù)字,因此它只是一種誤導(dǎo)。


查看完整回答
反對(duì) 回復(fù) 2023-10-21
?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以使用此函數(shù)生成超過(guò)1任何最大值的數(shù)字字符串PHP_INT_MAX(最大值和結(jié)果都必須是字符串)

重要提示:不要將其用于加密,因?yàn)椴⒎撬袛?shù)字都有相同的被選擇機(jī)會(huì):

  • 由于我們默認(rèn)為零到“1”,結(jié)果“1”的機(jī)會(huì)加倍

  • 我們隨機(jī)選擇每個(gè)字符,因此根據(jù)選擇的最大值,并非所有數(shù)字都有相同的機(jī)會(huì)

<?php

function notCryptoRandomDecimalString($maxStrValue){

    $result = '';

    $maxBegin = '';

    

    for($i = 0; $i < strlen($maxStrValue); $i++){

        $maxDigit = $maxStrValue[$i];

        //if beginning of the result is same than beginning of the max,

        //we limit random to current char from maximum, or else it can be from 0 to 9

        if($result === $maxBegin){

            $result .= random_int(0, $maxDigit);

        }else{

            $result .= random_int(0, 9);

        }

        $maxBegin .= $maxDigit;

    }

    

    //remove leading zeroes

    $result = ltrim($result, '0');

    

    //if zero was picked, default to 1

    if($result === ''){

        $result = '1';

    }

    

    return $result;

}


echo(notCryptoRandomDecimalString('18446744073709551615'));


查看完整回答
反對(duì) 回復(fù) 2023-10-21
  • 2 回答
  • 0 關(guān)注
  • 154 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)