កូដ php ដែលផលិតរួចរាល់សម្រាប់ម៉ាស៊ីនបង្កើតលេខចៃដន្យ។ ដោយប្រើមុខងារចៃដន្យ PHP ។ ស្គ្រីបសង្គ្រោះពាក្យសម្ងាត់

សួស្តីអ្នកទាំងអស់គ្នា! នៅក្នុងអត្ថបទនេះយើងនឹងពិនិត្យមើល, តើមានអ្វីថ្មីសម្រាប់ការបង្កើតលេខចៃដន្យនៅក្នុង PHP 7.1.

ការអាប់ដេតនេះបានកើតឡើងចំពោះអ្នកអភិវឌ្ឍន៍ដែលមើលមិនឃើញ ប៉ុន្តែបានកែលម្អភាសាសរសេរកម្មវិធី PHPនៅក្នុងវិស័យនៃការបង្កើតលេខចៃដន្យ។

តាម​ដែល​គេ​ដឹង​គឺ​ក្នុង​ PHPយើងអាចប្រើមុខងារ Rand (អប្បបរមា, អតិបរមា)ដើម្បីបង្កើតលេខចៃដន្យ៖

Echo Rand (7, 17);

ប្រសិនបើអ្នកឥឡូវនេះធ្វើឱ្យទំព័រឡើងវិញ អ្នកនឹងទទួលបានលេខចៃដន្យថ្មីរាល់ពេល។

ប៉ុន្តែមិនមែនអ្វីគ្រប់យ៉ាងគឺសាមញ្ញដូចដែលវាហាក់ដូចជា។ ចំណុចនោះគឺថាអាស្រ័យលើអ្វីដែលអ្នកកំពុងបង្កើតលេខចៃដន្យសម្រាប់មុខងារ រ៉ែន ()ប្រើប្រព័ន្ធជំនាន់ផ្សេងៗគ្នា។ ទាំងនោះ។ វាអាស្រ័យលើប្រព័ន្ធដែលវាត្រូវបានប្រើ។ ប្រព័ន្ធមួយចំនួនអាចប្រើវិធីសាស្ត្របង្កើតខ្សោយ ដូច្នេះអ្នកនឹងទទួលបានលេខដែលមិនចៃដន្យទាំងស្រុង។

IN PHP 7.1បញ្ហានេះត្រូវបានជួសជុល ហើយមុខងារមួយត្រូវបានបន្ថែម mt_rand():

អេកូ mt_rand(7, 17);

មុខងារនេះដំណើរការបានប្រសើរជាងមុន រួមទាំងសុវត្ថិភាពផងដែរ។ អ្វីដែលសំខាន់ផងដែរដើម្បីដឹងគឺថាប្រសិនបើអ្នកប្រើមុខងារ រ៉ែន ()PHP 7.1បន្ទាប់មកវានឹងត្រូវបានសរសេរជាន់លើដោយស្វ័យប្រវត្តិ mt_rand(). ទាំងនោះ។ រ៉ែន ()ឥឡូវនេះគ្រាន់តែជាឈ្មោះហៅក្រៅសម្រាប់ mt_rand().

មុខងារផ្សេងទៀតជាច្រើនសម្រាប់បង្កើតលទ្ធផលចៃដន្យត្រូវបានកែលម្អនៅក្នុង PHP 7.1. ជាឧទាហរណ៍ សូមក្រឡេកមើលពីរបៀបដែលយើងអាចទទួលបានតម្លៃចៃដន្យពីអារេមួយ៖

$names = ["Ivan", "Alexander", "Vasiliy"];
បន្ទរ $names;

ទាំងនោះ។ មុខងារបែបនេះត្រូវបានកែលម្អដើម្បីបង្កើតលេខចៃដន្យកាន់តែប្រសើរឡើង PHP 7.1. បាទ ការអាប់ដេតនេះមិនមានការកត់សម្គាល់ទេ ប៉ុន្តែទោះបីជាអ្នកសរសេរជាភាសាអ្វីក៏ដោយ វាជាការសំខាន់ណាស់ដែលត្រូវយល់ពីអ្វីដែលកំពុងកើតឡើងនៅក្នុងមុខងារ និងរបៀបដែលវាមានឥរិយាបទ។

កិច្ចការ
អ្នកត្រូវបង្កើតលេខចៃដន្យក្នុងជួរលេខ។

ដំណោះស្រាយ
មុខងារ mt_rand() ត្រូវបានរចនាឡើងសម្រាប់នេះ៖

// ចំនួនចៃដន្យរវាង $ ខាងលើ និង $ ទាបជាង រួមបញ្ចូល
$random_number = mt_rand($ទាបជាង, $upper);

ការពិភាក្សា
ការបង្កើតលេខចៃដន្យមានប្រយោជន៍នៅពេលដែលអ្នកត្រូវការបង្ហាញរូបភាពចៃដន្យនៅលើអេក្រង់ កំណត់ដោយចៃដន្យនូវចំណុចចាប់ផ្តើមនៅក្នុងហ្គេម ជ្រើសរើសធាតុចៃដន្យពីមូលដ្ឋានទិន្នន័យ ឬបង្កើតការកំណត់អត្តសញ្ញាណសម័យពិសេសមួយ។ ដើម្បីបង្កើតលេខចៃដន្យក្នុងចន្លោះពេលរវាងចំណុចពីរ អ្នកត្រូវឆ្លងកាត់អាគុយម៉ង់ពីរទៅអនុគមន៍ mt_rand()៖

$random_number = mt_rand(1, 100);

ការហៅទូរសព្ទទៅ mt_rand() ដោយគ្មានអាគុយម៉ង់ ត្រឡប់លេខរវាងសូន្យ និងចំនួនចៃដន្យអតិបរមា ត្រឡប់ដោយ mt_getrandmax()។ វាពិបាកសម្រាប់កុំព្យូទ័រដើម្បីបង្កើតលេខចៃដន្យពិតប្រាកដ។ គាត់មានភាពល្អប្រសើរជាងក្នុងការធ្វើតាមការណែនាំជាវិធីសាស្ត្រ ហើយមិនសូវល្អទេ ប្រសិនបើគាត់ត្រូវបានតម្រូវឱ្យធ្វើសកម្មភាពដោយឯកឯង។ ប្រសិនបើអ្នកត្រូវការបង្ខំកុំព្យូទ័រឱ្យផលិតលេខចៃដន្យ នោះអ្នកត្រូវផ្តល់ឱ្យវានូវសំណុំជាក់លាក់នៃពាក្យបញ្ជាដែលអាចធ្វើម្តងទៀតបាន ហើយការពិតនៃការធ្វើម្តងទៀតធ្វើឱ្យការសម្រេចបាននូវចៃដន្យទំនងជាតិចជាង។

PHP មានម៉ាស៊ីនបង្កើតលេខចៃដន្យពីរផ្សេងគ្នា៖ មុខងារបុរាណហៅថា rand() និងមុខងារកម្រិតខ្ពស់ជាង mt_rand()។

MT (Mersenne Twister) គឺជាម៉ាស៊ីនបង្កើតលេខចៃដន្យ ដែលដាក់ឈ្មោះតាមព្រះសង្ឃបារាំង និងគណិតវិទូ Marin Mersenne ដែលបានសិក្សាលេខបឋម។ ក្បួនដោះស្រាយនៃម៉ាស៊ីនភ្លើងនេះគឺផ្អែកលើលេខបឋមទាំងនេះ។ អនុគមន៍ mt_rand() លឿនជាងអនុគមន៍ rand() ហើយបង្កើតលេខចៃដន្យកាន់តែច្រើន ដូច្នេះយើងចូលចិត្តអតីត។

ប្រសិនបើអ្នកមានកំណែ PHP លឿនជាង 4.2 បន្ទាប់មកមុនពេលហៅមុខងារ mt_rand() (ឬ rand()) ជាលើកដំបូង អ្នកត្រូវចាប់ផ្តើមម៉ាស៊ីនភ្លើងជាមួយនឹងតម្លៃដំបូងដោយហៅ mt_srand() (ឬ srand( )) មុខងារ។ គ្រាប់ពូជគឺជាលេខដែលអនុគមន៍ចៃដន្យប្រើជាមូលដ្ឋានសម្រាប់បង្កើតលេខចៃដន្យដែលវាត្រឡប់។ វាសំដៅទៅលើវិធីមួយដើម្បីដោះស្រាយបញ្ហាលំបាកដែលបានរៀបរាប់ខាងលើ - ការកើតឡើងដដែលៗធៀបនឹងភាពចៃដន្យ។

ជាតម្លៃដំបូងដែលផ្លាស់ប្តូរយ៉ាងរហ័ស និងមានប្រូបាប៊ីលីតេទាបនៃការធ្វើឡើងវិញបាន (លក្ខណៈសម្បត្តិទាំងនេះគួរតែកំណត់លក្ខណៈនៃតម្លៃដំបូងដ៏ល្អ) អ្នកអាចយកតម្លៃដែលត្រឡប់ដោយអនុគមន៍ពេលវេលាដែលមានភាពជាក់លាក់ខ្ពស់ microtime()។ វាគ្រប់គ្រាន់ក្នុងការចាប់ផ្តើមម៉ាស៊ីនភ្លើងម្តង។ PHP 4.2 និងក្រោយមកគ្រប់គ្រងការចាប់ផ្ដើមដោយស្វ័យប្រវត្តិ ប៉ុន្តែប្រសិនបើតម្លៃដំបូងត្រូវបានកំណត់ដោយដៃមុនពេលការហៅលើកដំបូងទៅកាន់ mt_rand() PHP មិនជំនួសវាដោយតម្លៃដំបូងរបស់វានោះទេ។

ប្រសិនបើអ្នកត្រូវការជ្រើសរើសកំណត់ត្រាចៃដន្យពីមូលដ្ឋានទិន្នន័យ វិធីងាយស្រួលបំផុតគឺកំណត់ចំនួនវាលសរុបក្នុងតារាងជាមុនសិន ជ្រើសរើសលេខចៃដន្យពីជួរនោះ ហើយបន្ទាប់មកសួរជួរនោះពីមូលដ្ឋានទិន្នន័យ៖

$sth = $dbh->query("SELECT COUNT(*) AS count FROM quotes");
ប្រសិនបើ ($row = $sth->fetchRow()) (
$count = $row;
) ផ្សេងទៀត (
ស្លាប់ ($row->getMessage());
}
$random = mt_rand(0, $count - 1);
$sth = $dbh->query("SELECT quotes FROM quotes LIMIT $random,1");
while ($row = $sth->fetchRow()) (
បោះពុម្ព $ ជួរ។

"\n";
}

បណ្តុំកូដនេះកំណត់ចំនួនជួរដេកសរុបក្នុងតារាង បង្កើតចំនួនចៃដន្យពីជួរនោះ ហើយបន្ទាប់មកប្រើ LIMIT $random,1 ដើម្បីជ្រើសរើសជួរដេកមួយពីតារាងដោយចាប់ផ្តើមពីទីតាំង $random ។ នៅក្នុង MySQL កំណែ 3.23 ឬខ្ពស់ជាងនេះ ជម្រើសជំនួសគឺអាចធ្វើទៅបាន៖

$sth = $dbh->query("ជ្រើសរើសសម្រង់ពីសម្រង់ ORDER BY RAND() LIMIT 1");
while ($row = $sth->fetchRow()) (
បោះពុម្ព $ ជួរ។ "\n";
}

ក្នុង​ករណី​នេះ MySQL ដំបូង​ចៃដន្យ​ជួរ​ដេក ហើយ​បន្ទាប់​មក​ត្រឡប់​ជួរ​ទីមួយ​វិញ។

ចាប់ផ្តើមម៉ាស៊ីនបង្កើតលេខចៃដន្យ។ វាក្យសម្ពន្ធ៖

គ្រាប់ពូជ int (គ្រាប់ពូជ)

ចាប់ផ្តើមម៉ាស៊ីនបង្កើតលេខចៃដន្យជាមួយនឹងតម្លៃគ្រាប់ពូជ។

Srand ((ពីរដង) មីក្រូម៉ោង () * 1000000);
$random = rand();
អេកូ $ ចៃដន្យ;

GETRANDMAX

ត្រឡប់លេខចៃដន្យធំបំផុតដែលអាចធ្វើបាន។ វាក្យសម្ពន្ធ៖

int getrandmax()

មុខងារនេះត្រឡប់តម្លៃអតិបរមាដែលអាចទទួលបានដោយប្រើមុខងារបង្កើតលេខចៃដន្យ rand()។

ជាធម្មតាវាគឺ 32767

បង្កើតលេខចៃដន្យ។ វាក្យសម្ពន្ធ៖

Int Rand()

នៅពេលហៅដោយប្រើជម្រើសអប្បបរមា និងប៉ារ៉ាម៉ែត្រអតិបរមា មុខងារនេះបង្កើតចំនួនចៃដន្យរហូតដល់ និងរួមបញ្ចូលប៉ារ៉ាម៉ែត្រទាំងនោះ។ ប្រសិនបើប៉ារ៉ាម៉ែត្រអប្បបរមា និងអតិបរមាត្រូវបានបាត់ លេខចាប់ពី 0 ដល់ RAND_MAX ត្រូវបានប្រគល់មកវិញ។

ដើម្បីឱ្យមុខងារនេះដំណើរការបានត្រឹមត្រូវ មុនពេលប្រើវា អ្នកត្រូវចាប់ផ្តើមបង្កើតលេខចៃដន្យជាមួយមុខងារ srand()។

lcg_value()

ម៉ាស៊ីនបង្កើតលេខចៃដន្យ LCG (PHP 4, PHP 5)

ការពិពណ៌នា៖

អណ្តែត lcg_value (ទុកជាមោឃៈ)

lcg_value() ត្រឡប់លេខ pseudorandom ក្នុងជួរ (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() គឺជាការជំនួសដ៏ល្អ។ វាប្រើម៉ាស៊ីនបង្កើតលេខចៃដន្យដែលលឿនជាង rand () 4 ដង ហើយប្រើ Mersenne Twister ។

បានហៅដោយគ្មានអំណះអំណាងអប្បបរមា និងអតិបរមាជាជម្រើស mt_rand() ត្រឡប់តម្លៃចៃដន្យចន្លោះពី 0 និង RAND_MAX ។ ប្រសិនបើអ្នកត្រូវការដើម្បីទទួលបានឧទាហរណ៍តម្លៃចៃដន្យរវាង 5 និង 15 រួមបញ្ចូល រកមើល mt_rand (5, 15) ។

ឧទាហរណ៍នៃការប្រើប្រាស់ mt_rand()

បន្ទរ mt_rand() ។ "\n";
បន្ទរ mt_rand() ។ "\n";

អេកូ 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()
{
list($usec, $sec) = explode(" ", microtime());
ត្រឡប់ (អណ្តែត) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());
$randval = mt_rand();
?>

មតិយោបល់៖ គិតត្រឹម PHP 4.2.0 វាលែងចាំបាច់ក្នុងការចាប់ផ្តើមម៉ាស៊ីនបង្កើតលេខចៃដន្យជាមួយ srand() ឬ mt_srand() ចាប់តាំងពីពេលនេះត្រូវបានធ្វើដោយស្វ័យប្រវត្តិ។

ឥឡូវនេះ យើងយកមុខងារបង្កើតពាក្យសម្ងាត់ដែលត្រៀមរួចជាស្រេច ហើយសរសេរស្គ្រីបដើម្បីសង្គ្រោះ ឬបង្កើតពាក្យសម្ងាត់ថ្មីសម្រាប់អ្នកប្រើប្រាស់គេហទំព័ររបស់អ្នក។

ស្គ្រីបសង្គ្រោះពាក្យសម្ងាត់

តើស្គ្រីបជាធម្មតាត្រូវបានសរសេរយ៉ាងដូចម្តេច?

ដូចរាល់ដង គ្រោងការណ៍មួយជំហានម្តងៗត្រូវបានគូរឡើង អ្វីដែលយើងត្រូវធ្វើមួយជំហានម្តងៗ។ អ្វីគ្រប់យ៉ាងកើតឡើងនៅក្នុងឯកសារមួយ, reminder.php

1. យើងដំណើរការស្គ្រីបលុះត្រាតែមានអថេរជាក់លាក់មួយ ឧទាហរណ៍ $action;

2. ដើម្បីចាប់ផ្តើមដំណើរការបង្កើតពាក្យសម្ងាត់ អ្នកប្រើប្រាស់បញ្ជាក់អាសយដ្ឋានអ៊ីមែល $_POST[`ema'l`]; ដើម្បីសម្រួលកូដ សូមកំណត់តម្លៃនេះទៅអថេរ $email។

3. ដោយប្រើកន្សោមធម្មតា យើងពិនិត្យមើលតួអក្សរទាំងអស់ដើម្បីធានាថាអ្នកប្រើប្រាស់បានបញ្ចូលអាសយដ្ឋានអ៊ីមែលត្រឹមត្រូវ។ បើមិនដូច្នោះទេ យើងបង្ហាញកំហុស និងបញ្ឈប់ស្គ្រីប។ ប្រសិនបើអ្វីៗទាំងអស់ត្រឹមត្រូវ យើងបន្តទៅមុខទៀត។

4. យើងរកមើលនៅក្នុងមូលដ្ឋានទិន្នន័យ ក្នុងករណីរបស់យើងនៅក្នុងតារាងអ្នកប្រើប្រាស់ សម្រាប់អ្នកប្រើប្រាស់ដែលមានអាសយដ្ឋានអ៊ីមែលនេះ។ ប្រសិនបើមិនមានទេ យើងចេញកំហុសដែលមិនមានអាសយដ្ឋានបែបនេះនៅក្នុងមូលដ្ឋានទិន្នន័យ ហើយបញ្ឈប់ស្គ្រីប។

5. មានអ្នកប្រើប្រាស់ដែលមានអាសយដ្ឋាននេះនៅក្នុងមូលដ្ឋានទិន្នន័យ សូមបន្តដំណើរការមុខងារបង្កើតពាក្យសម្ងាត់ថ្មី។ ដូចគ្នានេះផងដែរ ដោយប្រើអាសយដ្ឋានអ៊ីមែល យើងទទួលបានលេខសម្គាល់តែមួយគត់របស់អ្នកប្រើពីមូលដ្ឋានទិន្នន័យ ហើយសរសេរវាទៅអថេរ $id;