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
'programing' 카테고리의 다른 글
| 서블릿 필터를 사용하여 요청 매개 변수 수정 (0) | 2022.12.07 |
|---|---|
| MySQL과 Maria의 JSON_SEARCH 차이DB (0) | 2022.12.07 |
| 인수를 다른 Javascript 함수로 전달 (0) | 2022.12.07 |
| 치명적인 오류: 클래스 'SoapClient'를 찾을 수 없습니다. (0) | 2022.12.07 |
| 이전 쿼리 결과에 따라 테이블을 업데이트하는 중 (0) | 2022.12.07 |