มีวิธีสร้างตัวเลขสุ่มตามค่าต่ำสุดและสูงสุดหรือไม่?
ตัวอย่างเช่นหากขั้นต่ำคือ 1 และสูงสุด 20 ควรสร้างตัวเลขใด ๆ ระหว่าง 1 ถึง 20 รวมทั้ง 1 และ 20?
มีวิธีสร้างตัวเลขสุ่มตามค่าต่ำสุดและสูงสุดหรือไม่?
ตัวอย่างเช่นหากขั้นต่ำคือ 1 และสูงสุด 20 ควรสร้างตัวเลขใด ๆ ระหว่าง 1 ถึง 20 รวมทั้ง 1 และ 20?
random_int()
, หรือrandom_bytes()
openssl_random_pseudo_bytes()
ดังที่ @Salvador Dali กล่าวว่าrand()
อย่าสร้างผลลัพธ์ที่ปลอดภัยด้วยการเข้ารหัส ดูเอกสารphp.net/manual/en/function.rand.php
คำตอบ:
<?php
$min=1;
$max=20;
echo rand($min,$max);
?>
ในPHP7ใหม่มีการสนับสนุนสำหรับจำนวนเต็มสุ่มหลอกที่ปลอดภัยในการเข้ารหัส
int random_int ( int $min , int $max )
random_int - สร้างจำนวนเต็มสุ่มหลอกที่ปลอดภัยด้วยการเข้ารหัส
ซึ่งโดยพื้นฐานแล้วทำให้คำตอบก่อนหน้านี้ล้าสมัย
random_int
และrandom_bytes
ฟังก์ชั่น - github.com/paragonie/random_compat
random_int
อะไรบ้างที่จะไม่ใช้? หากให้ตัวเลขสุ่ม "ดีกว่า" ทำไมไม่ใช้ด้วยเหตุผลที่ไม่ใช่การเข้ารหัสลับ
random_int
s ที่มีอยู่แล้วให้rand
เป็น s นอกจากนี้กรณีการใช้งานของฉันคืออัลกอริธึมการลองใหม่และฉันไม่ต้องการให้ฟังก์ชันที่ล้มเหลวหลายตัวจับกลุ่มหลังจากนอนหลับเนื่องจากการสุ่มแบบสุ่มที่คาดเดาได้
เร็วรุ่นที่เร็วขึ้นจะใช้ mt_rand:
$min=1;
$max=20;
echo mt_rand($min,$max);
ที่มา: http://www.php.net/manual/en/function.mt-rand.php http://www.php.net/manual/en/function.mt-rand.php
หมายเหตุ:เซิร์ฟเวอร์ของคุณจำเป็นต้องเปิดใช้งานโมดูล Math PHP เพื่อให้สามารถใช้งานได้ หากไม่เป็นเช่นนั้นให้บักโฮสต์ของคุณเพื่อเปิดใช้งานหรือคุณต้องใช้แรนด์ปกติ (และช้ากว่า)
ฉันได้รวมคำตอบไว้ที่นี่และทำให้เป็นเวอร์ชันอิสระ
function generateRandom($min = 1, $max = 20) {
if (function_exists('random_int')):
return random_int($min, $max); // more secure
elseif (function_exists('mt_rand')):
return mt_rand($min, $max); // faster
endif;
return rand($min, $max); // old
}
rand(1,20)
เอกสารสำหรับฟังก์ชัน Rand ของ PHP อยู่ที่นี่:
http://php.net/manual/en/function.rand.php
ใช้srand()
ฟังก์ชันเพื่อตั้งค่าเมล็ดพันธุ์ของตัวสร้างตัวเลขสุ่ม
ลองอันนี้. มันจะสร้าง id ตามที่คุณต้องการ
function id()
{
// add limit
$id_length = 20;
// add any character / digit
$alfa = "abcdefghijklmnopqrstuvwxyz1234567890";
$token = "";
for($i = 1; $i < $id_length; $i ++) {
// generate randomly within given character/digits
@$token .= $alfa[rand(1, strlen($alfa))];
}
return $token;
}