programing

php 랜덤x 자리수

goodcopy 2022. 12. 7. 00:12
반응형

php 랜덤x 자리수

나는 x자리의 난수를 만들어야 한다.

x가 5라고 가정하면 숫자가 필요합니다. 예를 들어 35562 x가 3이면 463과 같이 되감습니다.

누가 어떻게 하는지 보여줄 수 있어요?

와 함께 사용하면 다음과 같이 할 수 있습니다.

$digits = 3;
echo rand(pow(10, $digits-1), pow(10, $digits)-1);

그러면 100 ~999 의 숫자가 출력됩니다.이는 10^2 = 100 및 10^3 = 1000이기 때문에 원하는 범위로 얻으려면 1로 빼야 합니다.

005도 유효한 예라면 다음 코드를 사용하여 선행 0으로 채우십시오.

$digits = 3;
echo str_pad(rand(0, pow(10, $digits)-1), $digits, '0', STR_PAD_LEFT);

저는 그냥...RAND() http://php.net/manual/en/function.rand.php

예.

rand ( 10000 , 99999 );

5자리 랜덤 번호에 대해

여기에서는, 문자, 숫자, 또는 특별한 기호를 사용해 임의의 문자열을 작성할 수 있는, 루프나 번거로움이 없는 심플한 솔루션을 소개합니다.

$randomNum = substr(str_shuffle("0123456789"), 0, $x);

어디에$x자리수일 수 있습니다.

예.substr(str_shuffle("0123456789"), 0, 5);

몇 번 실행한 결과

98450
79324
23017
04317
26479

같은 코드를 사용하여 랜덤 문자열을 생성할 수도 있습니다. 이렇게

$randomNum=substr(str_shuffle("0123456789abcdefghijklmnopqrstvwxyzABCDEFGHIJKLMNOPQRSTVWXYZ"), 0, $x);

결과:$x = 11

FgHmqpTR3Ox
O9BsNgcPJDb
1v8Aw5b6H7f
haH40dmAxZf
0EpvHL5lTKr

당신은 그 목적을 위해 사용할 수 있습니다.

값을 x자리 값으로 제한하려면 다음을 사용합니다.

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

숫자를 숫자 목록으로 처리하여 매번 무작위로 숫자를 추가합니다.

function n_digit_random($digits) {
  $temp = "";

  for ($i = 0; $i < $digits; $i++) {
    $temp .= rand(0, 9);
  }

  return (int)$temp;
}

또는 순수하게 수치적인 솔루션:

function n_digit_random($digits)
  return rand(pow(10, $digits - 1) - 1, pow(10, $digits) - 1);
}

제가 생각할 수 있는 가장 간단한 방법은rand와 기능하다.str_pad

<?php
echo str_pad(rand(0,999), 5, "0", STR_PAD_LEFT);
?>

위의 예에서는 0 ~999 범위의 난수를 생성합니다.

그리고 5자리 숫자.

function random_numbers($digits) {
    $min = pow(10, $digits - 1);
    $max = pow(10, $digits) - 1;
    return mt_rand($min, $max);
}

테스트 완료

rand(1000, 9999);x4배 이상 고속화rand(0,9);

벤치마크:

rand(1000, 9999)      : 0.147 sec.
rand(0,9)x4 times     : 0.547 sec.

두 함수는 모두 결과를 보다 명확하게 하기 위해 100,000회 반복 실행되었습니다.

간단한 php 함수 mt_rand(2000,9000)를 사용하면 4자리 난수를 생성할 수 있습니다.

mt_rand(2000,9000) 

루프를 사용하여 수행합니다.

function randomWithLength($length){

    $number = '';
    for ($i = 0; $i < $length; $i++){
        $number .= rand(0,9);
    }

    return (int)$number;

}

rand또는mt_rand그럼...

사용방법:

rand(min, max);

mt_rand(min, max);
function random_number($size = 5)
{
    $random_number='';
    $count=0;
    while ($count < $size ) 
        {
            $random_digit = mt_rand(0, 9);
            $random_number .= $random_digit;
            $count++;
        }
    return $random_number;  
}

임의의 x자리 난수를 생성할 수 있습니다.mt_rand()기능.

mt_rand()보다 빠르다rand().

구문:mt_rand()또는mt_rand($min , $max).

예:<?php echo mt_rand(); ?>

더 읽기

다음은 특정 길이 검증 코드를 생성하는 간단한 방법입니다.길이를 지정할 수 있으며 기본적으로는 4자리 코드를 생성합니다.

function get_sms_token($length = 4) {

    return rand(
        ((int) str_pad(1, $length, 0, STR_PAD_RIGHT)),
        ((int) str_pad(9, $length, 9, STR_PAD_RIGHT))
    );
}

echo get_sms_token(6);

이 간단한 대본이면 된다

$x = 4;//want number of digits for the random number
$sum = 0;


for($i=0;$i<$x;$i++)
{
    $sum = $sum + rand(0,9)*pow(10,$i);

}

echo $sum;

이것은 N자리 랜덤수를 생성하는 또 하나의 간단한 솔루션입니다.

$number_of_digits = 10;
echo substr(number_format(time() * mt_rand(),0,'',''),0,$number_of_digits);

http://codepad.org/pyVvNiof 에서 확인하세요.

function rand_number_available($already_mem_array,$boundary_min,$boundary_max,$digits_num)
{

    $already_mem_array_dim = count($already_mem_array);         // dimension of array, that contain occupied elements

    // --- creating Boundaries and possible Errors
    if( empty($digits_num) ){   
            $boundary_dim = $boundary_max - $boundary_min;
            if($boundary_dim <= 0){
                $error = -1;                                    // Error that might happen. Difference between $boundary_max and $boundary_min must be positive
            }else{
                $error = -2;                                    // Error that might happen. All numbers between, $boundary_min and $boundary_max , are occupied, by $already_mem_array
            }                                   
    }else{
            if($digits_num < 0){                                // Error. If exist, $digits_num must be, 1,2,3 or higher
                $error = -3; 
            }elseif($digits_num == 1){                          // if 'one-figure' number
                $error = -4;                                    // Error that might happen. All 'one-figure' numbers    are occupied, by $already_mem_array
                $boundary_min = 0;
                $boundary_max = 9;
                $boundary_dim = $boundary_max-$boundary_min;
            }elseif($digits_num == 2){                          // if 'two-figure' number
                $error = -5;                                    // Error that might happen. All 'two-figure' numbers    are occupied, by $already_mem_array
                $boundary_min = 10;
                $boundary_max = 99;
                $boundary_dim = $boundary_max-$boundary_min;
            }elseif($digits_num>2){                             // if 'X-figure' number. X>2
                $error = -6;                                    // Error that might happen. All 'X-figure' numbers  are occupied, by $already_mem_array. Unlikely to happen
                $boundary_min = pow(10, $digits_num-1);         // stepenovanje - graduation
                $boundary_max = pow(10, $digits_num)-1;
                $boundary_dim = $boundary_max-$boundary_min;
            }

    }
    // -------------------------------------------------------------------


    // --- creating response ---------------------------------------------
    if( ($already_mem_array_dim <= $boundary_dim)   &&  $boundary_dim>0 ){              // go here only if, there are AVAILABLE numbers to extract, and [difference] $boundary_dim , is positive
        do{
            $num = rand($boundary_min,$boundary_max);
        }while( in_array($num, $already_mem_array) );
        $result = $num;
    }else{
        $result = $error;                                       // Limit that happened  
    }

    return $result;
    // -------------------------------------------------------------------

}

이 기능은 반복 없이 원하는 자릿수만큼 완벽하게 작동합니다.

$digits = '';
function randomDigits($length){
    $numbers = range(0,9);
    shuffle($numbers);
    for($i = 0; $i < $length; $i++){
        global $digits;
        $digits .= $numbers[$i];
    }
    return $digits;
}

함수를 호출하여 자릿수를 전달할 수 있습니다.다음은 예를 제시하겠습니다.

randomDigits(4);

샘플 결과:

4957 8710 6730 6082 2987 2041 6721

원본 스크립트는 이 요지에서 가져온 것입니다.

그렇게 하지 rand()는 다음 문서에 따라 암호화로 보호된 값을 생성하지 않습니다.

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

이 함수는 암호화로 안전한 값을 생성하지 않으므로 암호화 목적으로 사용하지 마십시오.암호학적으로 안전한 값이 필요한 경우 대신 random_int(), random_bytes() 또는 openssl_random_pseudo_bytes()의 사용을 고려하십시오.

대신 사용하는 것이 좋습니다.random_int(), PHP 7에서 사용할 수 있습니다(참조: http://php.net/manual/en/function.random-int.php)

따라서 @Marcus의 답변을 확장하려면 다음을 사용해야 합니다.

function generateSecureRandomNumber($digits): int {
   return random_int(pow(10, $digits - 1), pow(10, $digits) - 1);
}

function generateSecureRandomNumberWithPadding($digits): string {
   $randomNumber = random_int(0, pow(10, $digits) - 1);
   return str_pad($randomNumber, $digits, '0', STR_PAD_LEFT);
}

「 」를 사용하고 있는 에 주의해 .rand()안전한 난수가 필요없다면 괜찮습니다.

다음 코드는 4자리 난수를 생성합니다.

echo sprintf( "%04d", rand(0,9999));

당신은 일을 복잡하게 만드는 것을 매우 좋아합니다:)

진짜 문제는 OP가 아마도 그것을 아주 큰 숫자의 끝에 추가하고 싶어한다는 것입니다. 그렇지 않다면, 나는 그것이 필요하다고 생각할 필요가 없습니다. 어떤 숫자의 왼쪽 0은 그냥 왼쪽 0이기 때문입니다.

그래서 그 숫자의 큰 부분을 수학 합계로 더하면 됩니다. 문자열이 아니라요.

예.

$x = "102384129" . complex_3_digit_random_string();

간단하게 되다

$x = 102384129000 + rand(0, 999);

다 했어요.

언급URL : https://stackoverflow.com/questions/8215979/php-random-x-digit-number

반응형