পিএইচপি ব্যবহার করে পরিসরে র্যান্ডম সংখ্যা [মিনিট - সর্বাধিক]


84

ন্যূনতম এবং সর্বাধিকের উপর নির্ভর করে এলোমেলো সংখ্যা তৈরি করার কোনও উপায় আছে কি?

উদাহরণস্বরূপ, যদি নূন্যতম 1 এবং সর্বোচ্চ 20 হয় তবে 1 এবং 20 সহ 1 এবং 20 এর মধ্যে কোনও সংখ্যা উত্পন্ন করা উচিত?


4
নতুন পিএইচপি সংস্করণে ক্রিপ্টোগ্রাফিক সুরক্ষিত এলোমেলো সংখ্যা জেনারেটর রয়েছে
সালভাদোর ডালি

4
পিএইচপি 7+ ব্যবহারের জন্য random_int(), random_bytes()বা openssl_random_pseudo_bytes() । যেমনটি সালভাদোর ডালি বলেছেন rand()যে ক্রিপ্টোগ্রাফিকভাবে নিরাপদ ফলাফল উত্পন্ন করবেন না। ডকুমেন্টেশন দেখুন php.net/manual/en/function.rand.php
ফ্রোজেনফায়ার

উত্তর:


148
<?php
  $min=1;
  $max=20;
  echo rand($min,$max);
?>

আমি যে MIN এবং রান্ড, সর্বোচ্চ সংখ্যক ডিজিটের সংখ্যার পরিবর্তে ব্যবহার করার জন্য :) thnx ছিল চিন্তা
Val,

সম্পর্কিত: যদি PHP_INT_MAX < ($max-$min), আপনাকে এই উত্তরে বর্ণিত হিসাবে একসাথে বিরতি যুক্ত করতে হবে ।
বিশপ

র্যান্ড () পিএইচপি 7.1 এর আগে কেবল খারাপ। এটি এলসিজি অ্যালগরিদম ব্যবহার করে যা পূর্বাভাসযোগ্য আউটপুট নিয়ে ফলাফল। এটিও ধীরগতির। যেহেতু পিএইচপি 7.1 র‌্যান্ড () এমটি_র্যান্ড () এর একটি উপাধি তৈরি করা হয় তাই আর খারাপ হয় না। পিএইচপি 7 এছাড়াও ক্রিপ্টোগ্রাফিক সুরক্ষিত র‌্যান্ডম_িন্ট () প্রবর্তন করেছে, তবে এটি প্রয়োজনীয় না হলে এড়ানো উচিত, যেহেতু এটি এমটি_র্যান্ড () এর চেয়ে অনেক ধীর
xZero

34

একটি নতুন পিএইচপি 7 এ শেষ পর্যন্ত একটি ক্রিপ্টোগ্রাফিক সুরক্ষিত সিউডো-র্যান্ডম পূর্ণসংখ্যার জন্য সমর্থন রয়েছে

int random_int ( int $min , int $max )

random_int - ক্রিপ্টোগ্রাফিকভাবে নিরাপদ সিউডো-র্যান্ডম পূর্ণসংখ্যার উত্পন্ন করে

যা মূলত পূর্ববর্তী উত্তরগুলি অচল করে দেয়।


4
দারুণ! তবে যতক্ষণ না ওয়েবহোস্টগুলি পিএইচপি 7 বিশ্বব্যাপী আরও সমর্থন করে, দুর্ভাগ্যক্রমে বিতরণের জন্য পণ্য তৈরি করা কারও পক্ষে এটি কার্যকর নয়। সুতরাং পিএইচপি 7 এ ALSO কাজ করে এমন পূর্ববর্তী উত্তরগুলি এখনও সেরা অনুশীলন।
ম্যাট ক্রমওয়েল

4
@ ম্যাটক্রোমওয়েল আমি তোমার সাথে একমত নই. যতক্ষণ না হোস্টিং সেবা PHP7 সমর্থন আমরা জন্য polyfill ব্যবহার করা উচিত random_intএবং random_bytes- ফাংশন github.com/paragonie/random_compat
ভ্লাদিমির পোসভিস্টেলিক

আমি কৌতূহলী, ব্যবহার না করার কোনও কারণ আছে কি random_int ? যদি এটি "আরও ভাল" এলোমেলো নম্বর দেয়, তবে কেন এটি অ-ক্রাইপ্টো কারণে ব্যবহার করবেন না?
ব্রায়ান লেশম্যান

4
@ ব্রায়ানলিশমান আমি বরং এটি সমস্ত কিছুর জন্য ব্যবহার করতে চাই। আমি কেবল অনুমান করতে পারি: এটি সম্ভবত এলোমেলোতার উত্সের উপর নির্ভর করে এবং যদি আপনি এলোমেলোভাবে বাইরে থাকেন তবে ব্যর্থ হতে পারে। এটি আরও ব্যয়বহুল হতে পারে (যাচাই করা দরকার) তবে আমার সন্দেহ যে এই একটি ফাংশনটি একটি বড় পার্থক্য করে
সালভাদোর ডালি

আমি জানি যে এটি ধীর, তবে এটি ফিরে না গিয়ে ইতিমধ্যে বিদ্যমান random_intএসকে এস তে পরিবর্তন করার পক্ষে যথেষ্ট নগণ্য rand। এছাড়াও, আমার ব্যবহারের কেসটি আবার চেষ্টা করে দেখুন অ্যালগরিদম, এবং আমি অবশ্যই প্রত্যাশাযোগ্য এলোমেলো ইনটসের কারণে ঘুমানোর পরে একাধিক ব্যর্থ ফাংশনগুলি ক্লাম্পিং করতে চাই না
ব্রায়ান লেশম্যান

19

একটি দ্রুততর দ্রুত সংস্করণ ব্যবহার করেন mt_rand:

$min=1;
$max=20;
echo mt_rand($min,$max);

সূত্র: http://www.php.net/manual/en/function.mt-rand.php

দ্রষ্টব্য: এটির জন্য আপনার সার্ভারের ম্যাথ পিএইচপি মডিউল সক্ষম হওয়া দরকার। যদি এটি না হয় তবে এটি সক্ষম করতে আপনার হোস্টটিকে বাগ করুন, বা আপনাকে স্বাভাবিক (এবং ধীর) র্যান্ড () ব্যবহার করতে হবে।


6
আপনি দ্রুত মানে? পার্থক্য (টাইপিং == বনাম দ্রুততর দ্রুত == কর্মক্ষমতা জ্ঞানী) হল
Val,

english.stackexchange.com/questions/31732/... - আসলে উভয়ই হতে পারে
pee2pee


6

আমি এখানে উত্তরগুলি বান্ডিল করেছি এবং এটির সংস্করণ স্বাধীন করেছি;

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
}

4
rand(1,20)

পিএইচপি-র র্যান্ড ফাংশনের জন্য ডক্স এখানে রয়েছে:

http://php.net/manual/en/function.rand.php

srand()এলোমেলো নম্বর জেনারেটরের বীজ মান সেট করতে ফাংশনটি ব্যবহার করুন।


0

আর একবার চেষ্টা কর. এটি আপনার ইচ্ছানুযায়ী আইডি উত্পন্ন করবে।

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;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.