1 থেকে 10 পর্যন্ত পিএইচপি র্যান্ডম সংখ্যা। PHP7.1-এ নতুন কী: এলোমেলো সংখ্যা তৈরি করা। জাভাস্ক্রিপ্টে র্যান্ডম সংখ্যা

"স্মার্ট কোটস" ব্লকে আমার ওয়েবসাইটে আমি কীভাবে এলোমেলো উদ্ধৃতিগুলি তৈরি করব তা আমাকে ইতিমধ্যে কয়েকবার জিজ্ঞাসা করা হয়েছে। এর পরে, আমি খুঁজে বের করতে পেরেছি যে এখানে সমস্যাটি হল লোকেরা বুঝতে পারে না কিভাবে পিএইচপি-তে একটি অ্যারে থেকে র্যান্ডম উপাদান আউটপুট করা যায়। কাজটি সহজ, কিন্তু তবুও, যেহেতু প্রশ্ন উঠেছে, সেগুলির উত্তর দিতে হবে।

আমি এখনই আপনাকে কোডটি দেব। ধরা যাক উদ্ধৃতিগুলির একটি সেট সহ একটি অ্যারে রয়েছে। এবং আপনাকে তাদের মধ্যে একটি এলোমেলো একটি নির্বাচন করতে হবে এবং আউটপুট করতে হবে:

মূল বিন্দু একটি র্যান্ডম নম্বর পাচ্ছেন. আপনাকে যা করতে হবে তা হল সঠিক সীমানা নির্ধারণ করা। আপনি যদি অ্যারের পুরো দৈর্ঘ্যের উপর একটি এলোমেলো উপাদান নির্বাচন করতে চান, তাহলে এটি 0 থেকে (অ্যারের দৈর্ঘ্য বিয়োগ 1)। এবং তারপর সহজভাবে ফলাফল র্যান্ডম সূচক সঙ্গে অ্যারে থেকে একটি উপাদান টান.

উদ্ধৃতি সহ কাজের জন্য, সেগুলি একটি ডাটাবেসে সংরক্ষণ করা ভাল। নীতিগতভাবে, যদি সাইটটি খুব সহজ হয়, তবে এটি একটি পাঠ্য ফাইলে করা যেতে পারে। কিন্তু যদি একটি ডাটাবেসে থাকে, তাহলে SQL ক্যোয়ারীতে RAND() এবং LIMIT ব্যবহার করা ভালো যাতে আপনি ডাটাবেস থেকে অবিলম্বে একটি একক এবং এলোমেলো উদ্ধৃতি পান।

একটি র্যান্ডম সংখ্যা তৈরি করতে, আপনি PHP র্যান্ড() বা mt_rand() ফাংশন ব্যবহার করতে পারেন। ভেরিয়েবল, ফাইলের নামকরণ, মূল তথ্য তৈরি এবং নিরাপত্তা নিশ্চিত করার জন্য র‍্যান্ডম সংখ্যা ব্যবহার করার প্রয়োজনীয়তা প্রায়ই দেখা দেয়।

এলোমেলোতা এবং স্বতন্ত্রতা

পিএইচপি র্যান্ডম ফাংশন দুটি ভেরিয়েন্টে আসে: Rand() এবং mt_rand()। এটা বিশ্বাস করা হয় যে প্রথম ক্ষেত্রে অ্যালগরিদম সহজ এবং সিউডোর্যান্ডম সংখ্যা তৈরি করে। দ্বিতীয় বিকল্পটিতে একটি দ্রুত অ্যালগরিদম এবং সুপরিচিত গাণিতিক বৈশিষ্ট্য রয়েছে। বেশিরভাগ ক্ষেত্রে যখন আপনার একটি র্যান্ডম নম্বর পেতে হয়, আপনি পিএইচপি র্যান্ডম কলগুলির একটি সিরিজ ব্যবহার করতে পারেন এবং নম্বরগুলির একটি অনন্য সমন্বয় পেতে পারেন।

আপনি যদি 1 থেকে 26 বা 1 থেকে 32 পর্যন্ত সংখ্যাগুলিকে ভিত্তি হিসাবে নেন এবং সেগুলি এলোমেলোভাবে পান, আপনি ল্যাটিন বা সিরিলিক অক্ষরের ক্রম হিসাবে মূল তথ্য তৈরি করতে পারেন। এই ক্ষেত্রে, পিএইচপি র্যান্ডম হল বর্ণানুক্রমিক তথ্যের একটি ক্রম তৈরি করার একটি উপায়, উদাহরণস্বরূপ যোগাযোগের চ্যানেল বা অ্যালগরিদম পরীক্ষা করার উদ্দেশ্যে।

একটি এলোমেলো সংখ্যা খুব কমই অনন্য কারণ এটি একটি র্যান্ডম ভেরিয়েবলের বন্টন আইন অনুসারে একাধিকবার উপস্থিত হতে পারে। কিন্তু আপনি যদি জাভাস্ক্রিপ্ট ভাষার স্ট্যাটিক ভেরিয়েবল PHP এবং Math.random একত্রিত করেন তবে আপনি একটি বাস্তব অনন্য র্যান্ডম নম্বর পেতে পারেন যা সময়ের সাথে পুনরাবৃত্তি হবে না।

টাইম ফাংশন ব্যবহার করে

সময় ফাংশন, পিএইচপি এবং জাভাস্ক্রিপ্ট উভয়ই, আপনাকে সংখ্যার অনন্য সমন্বয় তৈরি করতে দেয়, খুব কমই যখন একটি সময়ে পর্যাপ্ত সংখ্যক ঘটনা ঘটতে পারে এবং এলোমেলো পরিবর্তনশীল পুনরাবৃত্তি হবে।

সম্ভাব্য মানের একটি বড় পরিসরে সেকেন্ড বা মিলিসেকেন্ডের পরিসরে পিএইচপি র্যান্ডম প্রয়োগ করে, সংখ্যা বা অক্ষরের অনন্য র্যান্ডম সমন্বয় পাওয়া সম্ভব। আর কি?

টাইম ফাংশনের মান, ক্রমান্বয়ে ক্রমবর্ধমান সংখ্যা এবং পিএইচপি র্যান্ডমকে একত্রিত করে, আপনি ক্লায়েন্ট এবং সার্ভার যোগাযোগ চ্যানেলগুলির নির্ভরযোগ্য নিরাপত্তা নিশ্চিত করতে পারেন, ভেরিয়েবলের জন্য অনন্য কোড তৈরি করতে পারেন এবং অ্যালগরিদমে অপ্রত্যাশিত ঘটনাগুলি তৈরি করতে পারেন৷

একটি PHP র্যান্ডম নম্বর জেনারেটর বেশিরভাগ কাজের জন্য একটি চমৎকার সমাধান, বিশেষ করে যখন আপনাকে ন্যূনতম প্রচেষ্টার সাথে দ্রুত উচ্চ-মানের ফলাফল পেতে হবে। ক্রমানুসারে ক্রমবর্ধমান সংখ্যার সিরিজ বা সময়ের মানগুলির সাথে একত্রে rand() এবং mt_rand ফাংশনগুলি ব্যবহার করা আপনাকে র্যান্ডম সংখ্যাগুলি পেতে দেয়, মানগুলির পুনরাবৃত্তি এবং অনন্য উভয়ই।

র্যান্ডম নম্বর জেনারেটর শুরু করে। বাক্য গঠন:

অকার্যকর srand (int বীজ)

বীজের মান সহ র্যান্ডম সংখ্যা জেনারেটর শুরু করে।

Srand((ডবল) মাইক্রোটাইম()*1000000);
$ random = rand();
প্রতিধ্বনি $র্যান্ডম;

GETRANDMAX

সবচেয়ে বড় সম্ভাব্য এলোমেলো সংখ্যা প্রদান করে। বাক্য গঠন:

int getrandmax()

এই ফাংশনটি সর্বাধিক মান প্রদান করে যা rand() র্যান্ডম নম্বর জেনারেশন ফাংশন ব্যবহার করে প্রাপ্ত করা যেতে পারে।

সাধারণত এটি 32767 হয়

একটি এলোমেলো সংখ্যা তৈরি করে। বাক্য গঠন:

int র্যান্ড()

ঐচ্ছিক ন্যূনতম এবং সর্বোচ্চ পরামিতিগুলির সাথে কল করা হলে, এই ফাংশনটি সেই পরামিতিগুলি সহ একটি র্যান্ডম সংখ্যা তৈরি করে। ন্যূনতম এবং সর্বোচ্চ পরামিতি অনুপস্থিত থাকলে, 0 থেকে RAND_MAX পর্যন্ত একটি সংখ্যা প্রদান করা হয়।

এই ফাংশনটি সঠিকভাবে কাজ করার জন্য, এটি ব্যবহার করার আগে, আপনাকে srand() ফাংশন দিয়ে র্যান্ডম নম্বর জেনারেটর শুরু করতে হবে।

lcg_value()

এলসিজি সিউডো-র্যান্ডম নম্বর জেনারেটর (পিএইচপি 4, পিএইচপি 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()

র্যান্ডম নম্বর জেনারেটরের অনেক পুরানো সংস্করণের সন্দেহজনক বৈশিষ্ট্য রয়েছে এবং এটি ধীর। ডিফল্টরূপে, পিএইচপি র্যান্ডম () ফাংশন ব্যবহার করে র্যান্ডম সংখ্যা তৈরি করে। mt_rand() ফাংশন একটি ভাল প্রতিস্থাপন। এটি একটি র্যান্ডম সংখ্যা জেনারেটর ব্যবহার করে যা র্যান্ড() এর চেয়ে 4 গুণ দ্রুত এবং মারসেন টুইস্টার ব্যবহার করে।

ঐচ্ছিক সর্বনিম্ন এবং সর্বোচ্চ আর্গুমেন্ট ছাড়া কল করা হলে, mt_rand() 0 এবং RAND_MAX এর মধ্যে একটি ছদ্ম-এলোমেলো মান প্রদান করে। আপনি যদি পেতে চান, উদাহরণস্বরূপ, 5 এবং 15 এর মধ্যে র্যান্ডম মান অন্তর্ভুক্ত, mt_rand (5, 15) সন্ধান করুন।

mt_rand() ব্যবহারের উদাহরণ

এই উদাহরণ চালানোর ফলাফল এই মত কিছু হবে:

1604716014
1478613278
6

মন্তব্য করুন

দ্রষ্টব্য: 3.0.7 এর আগের সংস্করণে, ফাংশনের দ্বিতীয় প্যারামিটারটি সংখ্যার পরিসর নির্দিষ্ট করে। উদাহরণস্বরূপ, এই সংস্করণগুলিতে 5 এবং 15 এর মধ্যে র্যান্ডম সংখ্যা পেতে আপনাকে mt_rand(5, 11) ফাংশনটি নির্দিষ্ট করতে হবে।

mt_srand()

সেরা র্যান্ডম নম্বর জেনারেটরের প্রাথমিক মান সেট করে (PHP 3 >= 3.0.6, PHP 4, PHP 5)

বর্ণনা:

void mt_srand()

বীজ ব্যবহার করে এলোমেলো সংখ্যা জেনারেটরের প্রাথমিক মান সেট করে। PHP 4.2.0 অনুযায়ী, বীজ ঐচ্ছিক এবং র্যান্ডম মানগুলির জন্য ডিফল্ট সেটিংস বাদ দেওয়া হয়।

mt_srand() ব্যবহারের উদাহরণ

দ্রষ্টব্য: PHP 4.2.0 অনুযায়ী, srand() বা mt_srand() দিয়ে র্যান্ডম নম্বর জেনারেটর আরম্ভ করার প্রয়োজন নেই, যেহেতু এটি এখন স্বয়ংক্রিয়ভাবে সম্পন্ন হয়।

টেকনিক্যালি, "এলোমেলো নম্বর জেনারেটর" শব্দটি আজেবাজে কথা, যেহেতু সংখ্যাগুলো নিজেরাই এলোমেলো নয়। উদাহরণস্বরূপ, 100 একটি এলোমেলো সংখ্যা? 25 সম্পর্কে কি? এই শব্দটি আসলে যা বোঝায় তা হল এটি সংখ্যাগুলির একটি ক্রম তৈরি করে যা এলোমেলোভাবে প্রদর্শিত হয়। এটি একটি আরও কঠিন প্রশ্ন উত্থাপন করে: এলোমেলো সংখ্যার ক্রম কী? একমাত্র সঠিক উত্তর: এলোমেলো সংখ্যার একটি ক্রম হল এমন একটি ক্রম যেখানে সমস্ত উপাদান সম্পর্কহীন। এই সংজ্ঞাটি প্যারাডক্সের দিকে নিয়ে যায় যে কোন ক্রম হয় র্যান্ডম বা নন-এলোমেলো হতে পারে, ক্রমটি কীভাবে প্রাপ্ত হয় তার উপর নির্ভর করে। উদাহরণস্বরূপ, সংখ্যার নিম্নলিখিত স্ট্রিং
1 2 3 4 5 6 7 8 9 0
ক্রমানুসারে কীবোর্ডের উপরের লাইনটি টাইপ করে প্রাপ্ত হয়েছিল, তাই ক্রমটিকে এলোমেলোভাবে জেনারেট করা বিবেচনা করা যাবে না। কিন্তু যদি আপনি ব্যারেল থেকে সংখ্যাযুক্ত টেনিস বলগুলি নিয়ে যান তখন আপনি একই ক্রমটি পান কি করবেন। এই ক্ষেত্রে, এটি ইতিমধ্যেই একটি এলোমেলোভাবে উত্পন্ন ক্রম। এই উদাহরণটি দেখায় যে একটি সিকোয়েন্সের এলোমেলোতা নির্ভর করে এটি কীভাবে প্রাপ্ত হয়েছিল, এবং ক্রমটির উপর নয়।

মনে রাখবেন যে সংখ্যাগুলির একটি কম্পিউটার-উত্পাদিত ক্রম নির্ধারক: প্রথমটি ছাড়া প্রতিটি সংখ্যা তার আগের সংখ্যাগুলির উপর নির্ভর করে। টেকনিক্যালি, এর মানে হল যে শুধুমাত্র একটি কম্পিউটার দ্বারা সংখ্যার একটি আধা-এলোমেলো ক্রম তৈরি করা যেতে পারে, যেমন আসলে তারা সত্যিই এলোমেলো নয়. যাইহোক, এটি বেশিরভাগ কাজের জন্য যথেষ্ট এবং সরলতার জন্য এই ধরনের ক্রমগুলিকে র্যান্ডম বলা হবে। জন ভন নিউম্যান দ্বারা একটি খুব আকর্ষণীয় পদ্ধতি তৈরি করা হয়েছিল; এটাকে প্রায়ই রুট গড় বর্গ বলা হয়। এই পদ্ধতিতে, পূর্ববর্তী র্যান্ডম সংখ্যাটি বর্গ করা হয়, এবং তারপর ফলাফল থেকে মধ্যবর্তী সংখ্যাগুলি বের করা হয়। উদাহরণ স্বরূপ, আপনি যদি তিনটি সংখ্যা দিয়ে সংখ্যা তৈরি করেন এবং আগের সংখ্যাটি ছিল 121, তাহলে ফলাফলের বর্গ করলে ফলাফল 14641 পাওয়া যায়। মাঝের তিনটি সংখ্যার বর্গ করলে পরবর্তী র্যান্ডম সংখ্যা 464 পাওয়া যায়। এই পদ্ধতির অসুবিধা হল এটি একটি খুব সংক্ষিপ্ত পুনরাবৃত্তি সময়কাল, একটি চক্র বলা হয়। এই কারণে, এই পদ্ধতি আজ ব্যবহার করা হয় না। এলোমেলো সংখ্যা তৈরির আধুনিক পদ্ধতিগুলো অনেক বেশি জটিল।

পিএইচপি এ র্যান্ডম সংখ্যা

এলোমেলো সংখ্যার সাথে কাজ করার জন্য PHP এর দুটি গ্রুপ ফাংশন রয়েছে। বিশুদ্ধভাবে বাহ্যিকভাবে, গ্রুপগুলির একটির সমস্ত ফাংশনের জন্য mt_ উপসর্গ দ্বারা তাদের আলাদা করা যেতে পারে।

অবহেলিত বৈশিষ্ট্য
র্যান্ড ফাংশন শূন্য এবং RAND_MAX এর মানের মধ্যে একটি পূর্ণসংখ্যা প্রদান করে (যা 32767)। দুটি ঐচ্ছিক পূর্ণসংখ্যার পরামিতি থাকতে পারে - যদি সেগুলি নির্দিষ্ট করা থাকে, প্রথম পরামিতি থেকে দ্বিতীয় পর্যন্ত একটি এলোমেলো সংখ্যা তৈরি হয়।

ইকো র্যান্ড(); ইকো র্যান্ড (1,100); // 1 থেকে 100 পর্যন্ত একটি এলোমেলো সংখ্যা দিন

ফাংশন srand. র্যান্ড ফাংশন দ্বারা উত্পাদিত এলোমেলো সংখ্যার ক্রম নির্দিষ্ট করে। এটির একটি সম্পূর্ণ প্যারামিটার রয়েছে - এই প্যারামিটারের বিভিন্ন মানের জন্য, র্যান্ড সংখ্যার বিভিন্ন ক্রম তৈরি করবে। র্যান্ড ফাংশনে সমস্ত কল করার আগে srand ফাংশনটি শুধুমাত্র একবার কল করা দরকার। ব্যবহারের উদাহরণ:

Srand (1288); //($i=0; $query("নির্বাচন COUNT(*) এর জন্য উদ্ধৃতি থেকে গণনা করুন");
যদি ($row = $sth->fetchRow()) (
$count = $row;
) অন্য (
ডাই ($row->getMessage());
}
$random = mt_rand(0, $count - 1);
$sth = $dbh->ক্যোয়ারী("উদ্ধৃতি থেকে উদ্ধৃতি নির্বাচন করুন LIMIT $random,1");
যখন ($row = $sth->fetchRow()) (
$ সারি প্রিন্ট করুন।

"\n";
}

এই কোড স্নিপেটটি টেবিলের মোট সারির সংখ্যা নির্ধারণ করে, সেই পরিসর থেকে একটি র্যান্ডম সংখ্যা তৈরি করে এবং তারপরে $random অবস্থান থেকে শুরু করে টেবিল থেকে একটি সারি নির্বাচন করতে LIMIT $random,1 ব্যবহার করে। MySQL সংস্করণ 3.23 বা উচ্চতর, একটি বিকল্প বিকল্প সম্ভব:

$sth = $dbh->ক্যোয়ারী("কোট থেকে উদ্ধৃতি নির্বাচন করুন ORDER BY RAND() LIMIT 1");
যখন ($row = $sth->fetchRow()) (
$ সারি প্রিন্ট করুন। "\n";
}

এই ক্ষেত্রে, MySQL প্রথমে সারিগুলিকে র্যান্ডমাইজ করে এবং তারপর প্রথম সারিটি ফেরত দেয়।