PHP 임의의 x 자리 숫자
x 개의 자릿수로 난수를 만들어야합니다.
x가 5라고합시다. 예를 들면 숫자가 필요합니다. 35562 x가 3이면 다음과 같이 되돌립니다. 463
누군가 이것이 어떻게 수행되는지 보여줄 수 있습니까?
rand()
와 함께 사용 하여이를 수행 할 수 있습니다 pow()
.
$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);
나는 보통 http://php.net/manual/en/function.rand.php를 사용합니다 RAND()
.
예 :
rand ( 10000 , 99999 );
5 자리 난수
rand($min, $max)
정확한 목적으로 사용할 수 있습니다 .
값을 x 자리 값으로 제한하려면 다음을 사용할 수 있습니다.
$x = 3; // Amount of digits
$min = pow(10,$x);
$max = pow(10,$x+1)-1);
$value = rand($min, $max);
여기에 문자, 숫자 또는 특수 기호로 임의의 문자열을 만들 수있는 루프 나 번거 로움이없는 간단한 솔루션이 있습니다.
$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
번호를 숫자 목록으로 취급하고 매번 임의의 숫자를 추가하십시오.
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);
}
function random_numbers($digits) {
$min = pow(10, $digits - 1);
$max = pow(10, $digits) - 1;
return mt_rand($min, $max);
}
내가 생각할 수있는 가장 간단한 방법은 rand
함수를str_pad
<?php
echo str_pad(rand(0,999), 5, "0", STR_PAD_LEFT);
?>
위의 예에서는 0 ~ 999 범위의 난수를 생성 합니다.
그리고 5 자리 숫자입니다.
rand(1000, 9999);
x4 배보다 빠르게 작동 rand(0,9);
기준:
rand(1000, 9999) : 0.147 sec.
rand(0,9)x4 times : 0.547 sec.
두 함수 모두 결과를보다 명확하게 만들기 위해 100000 회 반복 실행되었습니다.
루프로 수행하십시오.
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;
}
4 자리 난수를 생성 할 수있는 간단한 PHP 함수 mt_rand (2000,9000)로 사용할 수 있습니다.
mt_rand(2000,9000)
이 간단한 스크립트는
$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
This function does not generate cryptographically secure values, and should not be used for cryptographic purposes. If you need a cryptographically secure value, consider using random_int(), random_bytes(), or openssl_random_pseudo_bytes() instead.
Instead it is better to use random_int()
, available on PHP 7 (See: http://php.net/manual/en/function.random-int.php).
So to extend @Marcus's answer, you should use:
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);
}
Note that using rand()
is fine if you don't need a secure random number.
you can generate any x-digit random number with mt_rand() function. mt_rand() much faster with rand() function syntax : mt_rand()
or mt_rand($min , $max)
.
example : <?php echo mt_rand(); ?>
you people really likes to complicate things :)
the real problem is that the OP wants to, probably, add that to the end of some really big number. if not, there is no need I can think of for that to be required. as left zeros in any number is just, well, left zeroes.
so, just append the larger portion of that number as a math sum, not string.
e.g.
$x = "102384129" . complex_3_digit_random_string();
simply becomes
$x = 102384129000 + rand(0, 999);
done.
ReferenceURL : https://stackoverflow.com/questions/8215979/php-random-x-digit-number
'development' 카테고리의 다른 글
사전 항목을 추가하거나 늘리는 방법은 무엇입니까? (0) | 2020.12.27 |
---|---|
jQuery 자동 완성 : 애니메이션 GIF 로딩 이미지를 표시하는 방법 (0) | 2020.12.27 |
자바 스크립트 컬렉션 (0) | 2020.12.27 |
Gson으로 열거 형 직렬화 및 역 직렬화 (0) | 2020.12.27 |
JavaScript에서 단일 비트를 어떻게 설정하고, 지우고, 토글합니까? (0) | 2020.12.27 |