คอมพิวเตอร์ Windows อินเทอร์เน็ต

สร้างตัวเลขสุ่มภายในช่วง แอปพลิเคชั่นฟังก์ชั่นสุ่ม PHP php ตัวสร้างตัวเลขสุ่มที่ดีที่สุด

เริ่มต้นเครื่องกำเนิดไฟฟ้า ตัวเลขสุ่ม... ไวยากรณ์:

Void srand (เมล็ด int)

เริ่มต้นตัวสร้างตัวเลขสุ่มด้วยเมล็ด

Srand ((สองเท่า) microtime () * 1000000);
$ สุ่ม = แรนด์ ();
ก้อง $ สุ่ม;

GETRANDMAX

ส่งกลับจำนวนสุ่มที่มากที่สุด ไวยากรณ์:

Int getrandmax ()

ฟังก์ชันนี้คืนค่าสูงสุดที่สามารถรับได้โดยใช้ฟังก์ชันการสร้างตัวเลขสุ่ม rand ()

มักจะเป็น 32767

สร้างตัวเลขสุ่ม ไวยากรณ์:

อินท์แรนด์ (])

เมื่อเรียกใช้ด้วยพารามิเตอร์ขั้นต่ำและสูงสุดที่ไม่บังคับ ฟังก์ชันนี้จะสร้างตัวเลขสุ่มภายในพารามิเตอร์เหล่านี้ หากไม่มีพารามิเตอร์ขั้นต่ำและสูงสุด ระบบจะส่งคืนตัวเลขระหว่าง 0 ถึง RAND_MAX

สำหรับ งานที่ถูกต้องก่อนใช้งานฟังก์ชันนี้ คุณต้องเริ่มต้นตัวสร้างตัวเลขสุ่มด้วยฟังก์ชัน srand ()

lcg_value ()

เครื่องกำเนิดตัวเลขสุ่มหลอก LCG (PHP 4, PHP 5)

คำอธิบาย:

ลอย lcg_value (เป็นโมฆะ)

lcg_value () ส่งคืนตัวเลขสุ่มหลอกในช่วง (0, 1) ฟังก์ชันนี้รวมตัวสร้างสองตัวที่มี 2 ^ 31 - 85 และ 2 ^ 31 - 249 ในช่วงเวลาหนึ่ง

mt_getrandmax ()

แสดงค่าสุ่มที่ใหญ่ที่สุดที่เป็นไปได้ (PHP 3> = 3.0.6, PHP 4, PHP 5)

คำอธิบาย:

Int mt_getrandmax (เป็นโมฆะ)

แสดงค่าสูงสุดที่ฟังก์ชัน mt_rand () ส่งคืนได้

mt_rand ()

สร้างค่าสุ่มที่ดีที่สุด (PHP 3> = 3.0.6, PHP 4, PHP 5)

คำอธิบาย:

Int mt_rand ()

เครื่องกำเนิดตัวเลขสุ่มรุ่นเก่าจำนวนมากมีลักษณะที่น่าสงสัยและทำงานช้า ตามค่าเริ่มต้น PHP จะใช้ตัวสร้างตัวเลขสุ่มของฟังก์ชัน rand () ฟังก์ชัน mt_rand () เป็นการแทนที่ที่ดี มันใช้ตัวสร้างตัวเลขสุ่มที่เร็วกว่าแรนด์ () 4 เท่า และใช้ Mersenne Twister

เรียกโดยไม่มีอาร์กิวเมนต์ min และ max ทางเลือก mt_rand () จะส่งกลับค่าสุ่มหลอกระหว่าง 0 ถึง RAND_MAX หากคุณต้องการได้รับตัวอย่างเช่นค่าสุ่มระหว่าง 5 ถึง 15 คุณจะพบ mt_rand (5, 15)

ตัวอย่างการใช้ mt_rand ()

เสียงสะท้อน mt_rand () "\ NS";
เสียงสะท้อน mt_rand () "\ NS";

เสียงสะท้อน mt_rand (5, 15);
?>

ตัวอย่างนี้จะส่งผลดังนี้:

1604716014
1478613278
6

ความคิดเห็น

ความคิดเห็น: ก่อนหน้า 3.0.7 พารามิเตอร์ที่สองของฟังก์ชันระบุช่วงของตัวเลข ตัวอย่างเช่น หากต้องการสุ่มตัวเลขระหว่าง 5 ถึง 15 เวอร์ชันเหล่านี้ต้องมีการระบุฟังก์ชัน mt_rand (5, 11)

mt_srand ()

ตั้งค่าเริ่มต้น เครื่องกำเนิดไฟฟ้าที่ดีที่สุดตัวเลขสุ่ม (PHP 3> = 3.0.6, PHP 4, PHP 5)

คำอธิบาย:

โมฆะ mt_srand ()

ตั้งค่าเมล็ดสำหรับเครื่องกำเนิดตัวเลขสุ่มโดยใช้เมล็ด ตั้งแต่ PHP 4.2.0 เป็นต้นไป เมล็ดจะเป็นตัวเลือก และค่าเริ่มต้นสำหรับค่าสุ่มจะถูกละเว้น

ตัวอย่างการใช้ mt_srand ()

// เพาะด้วยไมโครวินาที
ฟังก์ชั่น make_seed ()
{
รายการ ($ usec, $ วินาที) = ระเบิด ("", microtime ());
ผลตอบแทน (ลอย) $ วินาที + ((ลอย) $ usec * 100000);
}
mt_srand (make_seed ());
$ randval = mt_rand ();
?>

ความคิดเห็น: ตั้งแต่ PHP 4.2.0 เป็นต้นไป ไม่จำเป็นต้องเริ่มต้นตัวสร้างตัวเลขสุ่มด้วย srand () หรือ mt_srand () อีกต่อไป เนื่องจากสิ่งนี้จะเกิดขึ้นโดยอัตโนมัติ

คุณสามารถใช้ฟังก์ชัน rand () หรือ mt_rand () ของ PHP เพื่อสร้างตัวเลขสุ่ม ความต้องการใช้ตัวเลขสุ่มมักเกิดขึ้นในทางปฏิบัติสำหรับการตั้งชื่อตัวแปร ไฟล์ การสร้างข้อมูลคีย์ และการรับรองความปลอดภัย

ความบังเอิญและความเป็นเอกลักษณ์

ฟังก์ชันสุ่มของ PHP มาในสองรสชาติ: rand () และ mt_rand () เชื่อกันว่าอัลกอริทึมในกรณีแรกนั้นง่ายกว่าและสร้างตัวเลขสุ่มหลอก ตัวเลือกที่สองมีอัลกอริธึมที่เร็วกว่าและเป็นที่รู้จัก ลักษณะทางคณิตศาสตร์... ในกรณีส่วนใหญ่ เมื่อคุณต้องการรับหมายเลขสุ่ม คุณสามารถใช้ชุดของการโทรแบบสุ่ม PHP และรับชุดค่าผสมที่ไม่ซ้ำกันของตัวเลขได้

หากคุณนำตัวเลขตั้งแต่ 1 ถึง 26 หรือตั้งแต่ 1 ถึง 32 มาเป็นพื้นฐานและนำมาสุ่ม คุณสามารถสร้างข้อมูลสำคัญเป็นลำดับของตัวอักษรละตินหรือซิริลลิก ในกรณีนี้ PHP random เป็นวิธีการสร้างลำดับของข้อมูลที่เป็นตัวอักษร ตัวอย่างเช่น สำหรับการทดสอบช่องทางการสื่อสารหรืออัลกอริธึม

จำนวนสุ่มมักจะไม่ซ้ำกัน เนื่องจากสามารถปรากฏได้หลายครั้งตามกฎการกระจายของตัวแปรสุ่ม แต่ถ้าเรารวม static . โดยเฉพาะ ตัวแปร PHP& Math.random ของ JavaScript คุณจะได้รับหมายเลขสุ่มที่ไม่ซ้ำใครจริง ๆ ซึ่งจะไม่เกิดซ้ำเมื่อเวลาผ่านไป

การใช้ฟังก์ชันเวลา

ฟังก์ชันของเวลาทั้ง PHP และ JavaScript ช่วยให้คุณสร้างชุดค่าผสมของตัวเลขที่ไม่ซ้ำกัน ซึ่งแทบจะไม่เกิดขึ้นเมื่อเหตุการณ์จำนวนมากเพียงพอสามารถเกิดขึ้นได้ ณ จุดหนึ่งและ ค่าสุ่มจะถูกทำซ้ำ

ด้วยการใช้ PHP แบบสุ่มในช่วงวินาทีหรือมิลลิวินาทีกับค่าที่เป็นไปได้ที่หลากหลาย คุณจะได้รับชุดค่าผสมแบบสุ่มของตัวเลขหรือตัวอักษรที่ไม่ซ้ำกัน อะไรอีก?

รวมค่าของฟังก์ชันเวลา ตัวเลขที่เพิ่มขึ้นตามลำดับและ PHP แบบสุ่ม หรือคุณสามารถรับรองความปลอดภัยที่เชื่อถือได้ของช่องทางการสื่อสารของไคลเอ็นต์และเซิร์ฟเวอร์ สร้าง รหัสเฉพาะสำหรับตัวแปร ให้สร้างเหตุการณ์ที่คาดเดาไม่ได้ในอัลกอริทึม

ตัวสร้างตัวเลขสุ่ม PHP เป็นโซลูชั่นที่ยอดเยี่ยมสำหรับงานส่วนใหญ่ โดยเฉพาะอย่างยิ่งเมื่อคุณต้องการผลลัพธ์คุณภาพสูงอย่างรวดเร็วโดยมีค่าใช้จ่ายน้อยที่สุด การใช้ฟังก์ชัน rand () และ mt_rand ร่วมกับชุดตัวเลขหรือค่าเวลาที่เพิ่มขึ้นตามลำดับทำให้คุณได้ตัวเลขสุ่ม ทั้งค่าที่ซ้ำกันและไม่ซ้ำกัน

สวัสดีทุกคน! ในบทความนี้เราจะมาดูที่ มีอะไรใหม่ในการสร้างตัวเลขสุ่มใน PHP 7.1.

การอัปเดตนี้เกิดขึ้นกับนักพัฒนาอย่างล่องหน แต่ปรับปรุงภาษาการเขียนโปรแกรม PHPในด้านการสร้างตัวเลขสุ่ม

เท่าที่ทราบใน PHPเราสามารถใช้ฟังก์ชั่น แรนด์ (ต่ำสุด สูงสุด)เพื่อสร้างตัวเลขสุ่ม:

ก้องแรนด์ (7, 17);

หากคุณรีเฟรชหน้าตอนนี้ คุณจะได้รับหมายเลขสุ่มใหม่ทุกครั้ง

แต่ไม่ใช่ทุกอย่างจะง่ายอย่างที่คิด ประเด็นก็คือขึ้นอยู่กับสิ่งที่คุณสร้างตัวเลขสุ่มสำหรับ ฟังก์ชัน แรนด์ ()ใช้ ระบบต่างๆรุ่น. เหล่านั้น. ขึ้นอยู่กับระบบที่ใช้ ระบบบางระบบสามารถใช้วิธีการสร้างที่อ่อนแอ ตามลำดับ คุณจะไม่ได้รับตัวเลขสุ่มทั้งหมด

วี PHP 7.1ปัญหานี้ได้รับการแก้ไขแล้วและได้เพิ่มฟังก์ชันแล้ว mt_rand ():

ก้อง mt_rand (7, 17);

คุณลักษณะนี้ทำงานได้ดีขึ้นมาก รวมถึงการรักษาความปลอดภัย สิ่งสำคัญคือต้องรู้ด้วยว่าถ้าคุณใช้ฟังก์ชัน แรนด์ ()วี PHP 7.1จากนั้นจะถูกเขียนทับโดยอัตโนมัติไปยัง mt_rand ()... เหล่านั้น. แรนด์ ()ตอนนี้เป็นเพียงนามแฝงสำหรับ mt_rand ().

ฟังก์ชันอื่นๆ มากมายสำหรับการรับผลลัพธ์แบบสุ่มได้รับการปรับปรุงใน PHP 7.1... ตัวอย่างเช่น มาดูกันว่าเราจะได้รับค่าสุ่มจากอาร์เรย์ได้อย่างไร:

$ names = ["อีวาน", "อเล็กซานเดอร์", "วาซิลี"];
ก้อง $ ชื่อ;

เหล่านั้น. ฟังก์ชันใด ๆ เช่นนี้ได้รับการปรับปรุงเพื่อให้ได้ตัวเลขสุ่มที่มีคุณภาพดีขึ้นใน PHP 7.1... ใช่ การอัปเดตนี้ไม่มีใครสังเกตเห็น แต่ไม่ว่าคุณจะเขียนภาษาอะไร สิ่งสำคัญมากคือต้องทำความเข้าใจว่าเกิดอะไรขึ้นภายในฟังก์ชันและลักษณะการทำงาน

และตอนนี้เราใช้ฟังก์ชันสร้างรหัสผ่านสำเร็จรูปและเขียนสคริปต์เพื่อกู้คืนหรือสร้างรหัสผ่านใหม่สำหรับผู้ใช้เว็บไซต์ของคุณ

สคริปต์กู้คืนรหัสผ่าน

สคริปต์มักจะเขียนอย่างไร?

และเช่นเคย มีการร่างแบบทีละขั้นตอนซึ่งเราต้องทำเป็นขั้นตอน ทุกอย่างเกิดขึ้นในไฟล์เดียว alert.php

1. รันสคริปต์เฉพาะเมื่อมีตัวแปรบางอย่าง เช่น $ action;

2. ในการเริ่มต้นกระบวนการสร้างรหัสผ่าน ผู้ใช้ระบุที่อยู่อีเมล $ _POST [`ema'l`]; ในการทำให้โค้ดง่ายขึ้น ให้กำหนดค่านี้ให้กับตัวแปรอีเมล $

3. เราตรวจสอบด้วยความช่วยเหลือของนิพจน์ทั่วไปทุกตัวอักษรเพื่อให้ผู้ใช้ระบุที่อยู่อีเมลอย่างถูกต้อง ถ้าไม่ แสดงข้อผิดพลาด ยุติสคริปต์ ถ้าทุกอย่างถูกต้อง ไปต่อ

4. เรากำลังมองหาในฐานข้อมูล ในกรณีของเราในตารางผู้ใช้สำหรับผู้ใช้ที่มีดังต่อไปนี้ รหัสไปรษณีย์... หากไม่เป็นเช่นนั้น เราจะออกข้อผิดพลาดว่าไม่มีที่อยู่ดังกล่าวในฐานข้อมูล และยุติสคริปต์

5. มีผู้ใช้ที่มีที่อยู่ดังกล่าวในฐานข้อมูล ดำเนินการต่อและเปิดใช้ฟังก์ชันการสร้างรหัสผ่านใหม่ นอกจากนี้ ที่ที่อยู่อีเมล เราได้รับ ID ผู้ใช้ที่ไม่ซ้ำกันจากฐานข้อมูลและเขียนลงในตัวแปร $ id;

ในทางเทคนิค คำว่า "ตัวสร้างตัวเลขสุ่ม" นั้นไร้สาระ เนื่องจากตัวเลขนั้นไม่ได้สุ่ม ตัวอย่างเช่น 100 เป็นตัวเลขสุ่มหรือไม่? และ 25? ความหมายของคำนี้จริงๆ คือ มันสร้างลำดับของตัวเลขที่ปรากฏแบบสุ่ม สายพันธุ์นี้มากขึ้น ปัญหาที่ซับซ้อน: ลำดับของตัวเลขสุ่มคืออะไร? คำตอบเดียวที่ถูกต้อง: ลำดับของตัวเลขสุ่มคือลำดับที่องค์ประกอบทั้งหมดไม่เกี่ยวข้องกัน คำจำกัดความนี้นำไปสู่ความขัดแย้งที่ลำดับใดๆ สามารถเป็นได้ทั้งแบบสุ่มและไม่ใช่แบบสุ่ม ขึ้นอยู่กับว่าได้ลำดับนี้มาอย่างไร ตัวอย่างเช่น บรรทัดต่อไปนี้ของตัวเลข
1 2 3 4 5 6 7 8 9 0
ได้รับโดยการพิมพ์ สายบนคีย์บอร์ดตามลำดับ ลำดับจึงไม่ถือว่าเป็นการสุ่มสร้างลำดับ แต่ถ้าคุณได้ความสม่ำเสมอแบบเดียวกันโดยเอาลูกเทนนิสที่มีหมายเลขออกจากถัง ในกรณีนี้ เป็นลำดับที่สร้างขึ้นแบบสุ่มแล้ว ตัวอย่างนี้แสดงให้เห็นว่าการสุ่มของซีเควนซ์นั้นขึ้นอยู่กับวิธีการได้มา ไม่ได้ขึ้นอยู่กับตัวมันเอง

โปรดจำไว้ว่า ลำดับของตัวเลขที่สร้างโดยคอมพิวเตอร์เป็นตัวกำหนด: ทุกตัวเลขยกเว้นตัวแรกจะขึ้นอยู่กับตัวเลขก่อนหน้า ในทางเทคนิค นี่หมายความว่าคอมพิวเตอร์สามารถสร้างลำดับตัวเลขกึ่งสุ่มได้เท่านั้น กล่าวคือ อันที่จริง พวกเขาไม่ได้สุ่ม อย่างไรก็ตาม นี่เพียงพอสำหรับงานส่วนใหญ่ และลำดับดังกล่าวจะถูกเรียกแบบสุ่มเพื่อความเรียบง่าย วิธีหนึ่งที่น่าสนใจมากได้รับการพัฒนาโดย John von Neumann; มันมักจะถูกเรียกว่ารูทมีนสแควร์ ในวิธีนี้ หมายเลขสุ่มก่อนหน้าจะถูกยกกำลังสอง จากนั้นจึงดึงตัวเลขตรงกลางออกจากผลลัพธ์ ตัวอย่างเช่น หากคุณสร้างตัวเลขที่มีสามหลักและหมายเลขเดิมคือ 121 การยกกำลังสองจะได้ 14641 การเลือกตัวเลขสามหลักตรงกลางจะได้ตัวเลขสุ่มถัดไป 464 ข้อเสียของวิธีนี้คือมีระยะเวลาการทำซ้ำสั้นมาก เรียกว่า วง ... ด้วยเหตุนี้จึงไม่ได้ใช้วิธีนี้ในปัจจุบัน วิธีการที่ทันสมัยการสร้างตัวเลขสุ่มนั้นยากกว่ามาก

ตัวเลขสุ่มใน PHP

PHP มีฟังก์ชันตัวเลขสุ่มสองกลุ่ม ภายนอก พวกเขาสามารถแยกแยะได้ด้วยคำนำหน้า mt_ สำหรับฟังก์ชันทั้งหมดของกลุ่มใดกลุ่มหนึ่ง

ฟังก์ชั่นที่เลิกใช้แล้ว
แรนด์. ส่งกลับจำนวนเต็มจากศูนย์ถึง RAND_MAX (ซึ่งก็คือ 32767) สามารถมีพารามิเตอร์จำนวนเต็มให้เลือกได้สองพารามิเตอร์ - หากระบุไว้ ระบบจะสร้างตัวเลขสุ่มจากพารามิเตอร์ตัวแรกถึงตัวที่สอง

ก้องแรนด์ (); เสียงสะท้อน (1,100); // แจกตัวเลขสุ่มตั้งแต่ 1 ถึง 100

สแรนด์. ระบุลำดับของตัวเลขสุ่มที่สร้างโดยฟังก์ชัน rand มีพารามิเตอร์จำนวนเต็ม - สำหรับค่าต่างๆ ของพารามิเตอร์นี้ rand จะสร้างลำดับตัวเลขที่แตกต่างกัน สแรนด์จะต้องถูกเรียกเพียงครั้งเดียวก่อนจะโทรหาแรนด์ทั้งหมด ตัวอย่างการใช้งาน:

สแรนด์ (1288); // เริ่มต้นตัวสร้างตัวเลขสุ่มสำหรับ ($ i = 0; $ i<5;$i++){ echo rand(); echo "
"; }

ความสนใจ!ตั้งแต่ PHP 4.2.0 คุณไม่จำเป็นต้องเรียก srand () เพราะ PHP จะทำสิ่งนี้โดยอัตโนมัติ
ฟังก์ชัน Getrandmax () ส่งกลับจำนวนสุ่มสูงสุด (32767)

ฟังก์ชั่นของกลุ่มที่สอง (พร้อมคำนำหน้า mt_)
ชื่อและการกระทำของพวกเขาคล้ายกับฟังก์ชันของกลุ่มแรก - mt_rand, mt_srand และ mt_getrandmax ความแตกต่างหลักคือตัวเลขสุ่มนำมาจากช่วงกว้าง: ตั้งแต่ 0 ถึง 21937 - 1 นอกจากนี้ ฟังก์ชันเหล่านี้ทำงานได้เร็วกว่าฟังก์ชันแบบเก่ามาก เนื่องจากใช้เครื่องสร้างตัวเลขสุ่ม Mersenne Twister ซึ่งพัฒนาขึ้นในปี 1997 โดยนักวิทยาศาสตร์ชาวญี่ปุ่น ดังนั้นคำนำหน้า mt_ (Mersenne Twister)
ตัวอย่างการใช้งาน:

// ให้ตัวเลขสุ่มจาก 1,000 ถึง 2000 echo mt_rand (1000, 2000);

ตัวเลขสุ่มใน JavaScript

ตัวเลขสุ่มใน JavaScriptสามารถสร้างได้โดยใช้ Math.random () อย่างไรก็ตาม มันจะเป็นตัวเลขเศษส่วนระหว่าง 0 ถึง 1 (ไม่รวม 0 ถึง 1) ในการสร้างจำนวนเต็มสุ่มในช่วงที่ต้องการ คุณต้องเขียนฟังก์ชันของคุณเอง