র‍্যান্ডম নম্বর জেনারেটর

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

নির্বাচন করতে তৈরি করুন চাপুন
অপশন

দ্রুত এবং ন্যায্যভাবে একটি এলোমেলো সংখ্যা পেতে চান? এই বিনামূল্যের অনলাইন র‍্যান্ডম নম্বর জেনারেটরটি আপনার বেছে নেওয়া যেকোনো পরিসরে একটি সংখ্যা — অথবা সংখ্যার একটি সম্পূর্ণ তালিকা — তৈরি করে দেয়, ১ থেকে ১০-এর মতো সাধারণ পরিসর থেকে শুরু করে কোটি কোটি পর্যন্ত বিস্তৃত পরিসরে। 'সর্বনিম্ন' এবং 'সর্বোচ্চ' ঘরে সর্বনিম্ন ও সর্বোচ্চ মান বসান, কতগুলো সংখ্যা দরকার তা 'সংখ্যা' ঘরে বেছে নিন, এবং 'তৈরি করুন'-এ ক্লিক করুন। দুটো সীমাই ফলাফলের মধ্যে থাকে, তাই ১ থেকে ১০-এর একটি পরিসর ১ এবং ১০ — দুটোই দিতে পারে।

প্রতিটি ফলাফল সরাসরি আপনার ব্রাউজারে Web Crypto API (crypto.getRandomValues)-এর মাধ্যমে তৈরি হয় — এটি আপনার ব্রাউজারের অন্তর্নিহিত সিস্টেম এলোমেলোতা থেকে ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী মান সরবরাহ করে। কিছুই সার্ভারে পাঠানো হয় না, কিছুই সংরক্ষণ করা হয় না, এবং আমরা আপনার সংখ্যাগুলো কখনো দেখি না। ফলাফল তাৎক্ষণিকভাবে তৈরি হয় এবং ব্যক্তিগতই থাকে, আর পেজ লোড হওয়ার পর ধীর ইন্টারনেট সংযোগেও এটি কাজ করতে থাকে।

এই অপশনগুলো সেইসব বাস্তব পরিস্থিতির জন্য তৈরি করা হয়েছে, যেখানে মানুষের সত্যিই এলোমেলো সংখ্যার প্রয়োজন হয়। কোনো সংখ্যা যাতে দুবার না আসে সেজন্য 'পুনরাবৃত্তি ছাড়া' চালু করুন — এটি সেই সেটিং, যা আপনার লটারির ড্র, পুরস্কারের ড্র, বা মানুষকে পুনরাবৃত্তি ছাড়া দলে ভাগ করার জন্য দরকার। ৫০০ জন অংশগ্রহণকারীর মধ্যে থেকে বিশ জন বিজয়ী দরকার? 'সর্বনিম্ন' ১-এ এবং 'সর্বোচ্চ' ৫০০-এ বসান, 'পুনরাবৃত্তি ছাড়া' চালু করুন, 'সংখ্যা' ২০-এ বসান, এবং 'তৈরি করুন'-এ ক্লিক করুন। 'ক্রমবিন্যাস' ফলাফলকে ঊর্ধ্বক্রম বা নিম্নক্রমে সাজায়, এক ক্লিকেই সব ফলাফল কপি হয়ে যায়। 'আউটপুট ফরম্যাট'-কে 'নতুন লাইন' থেকে 'স্পেস দিয়ে পৃথক' অথবা 'কমা দ্বারা পৃথক'-এ পাল্টালে 'সেটের সংখ্যা' ঘরটি দেখা যায়: একসাথে একাধিক স্বাধীন ড্র — যেমন বিশটি ড্র রাউন্ডের জন্য প্রতিটিতে ৩টি করে সংখ্যার বিশটি সেট — আর 'সেটের মধ্যে পুনরাবৃত্তির অনুমতি দিন' ঠিক করে দেয় যে একই সংখ্যা একাধিক সেটে আসতে পারবে কিনা।

এলোমেলোতা আসলে কীভাবে তৈরি হয়? আপনার ব্রাউজার Math.random()-এর মতো কোনো JavaScript PRNG-এর বদলে Web Crypto API-এর মাধ্যমে ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী এলোমেলো মান সরবরাহ করে। 'তৈরি করুন'-এ ক্লিক করলে, পেজটি crypto.getRandomValues-এর মাধ্যমে এলোমেলো মান চায় এবং সেগুলো দিয়ে আপনার বেছে নেওয়া পরিসরে সংখ্যা তৈরি করে। এলোমেলোতার মূল উৎস আপনার ব্রাউজার এবং অপারেটিং সিস্টেম সরবরাহ করে, তাই পেজটিকে নিজস্ব কোনো শুরুর ভ্যালু (seed) বা সিউডো-র‍্যান্ডম ধারাবাহিকতা বজায় রাখতে হয় না।

একটি এলোমেলো মানকে আপনার পরিসরের মধ্যে বসানোর সময়ই জেনারেটরগুলো নিঃশব্দে ভুল করে বসে, আর এটি নিয়ে আলাদাভাবে বলা দরকার। মানটিকে পরিসরের আকার দিয়ে ভাগ করে যা অবশিষ্ট থাকে সেটা নেওয়াই সবচেয়ে সহজ পদ্ধতি, কিন্তু এটি পক্ষপাতদুষ্ট: পরিসরটি যদি ঠিকঠাক 2^32 দিয়ে ভাগ না হয়, তাহলে সবচেয়ে ছোট সংখ্যাগুলো বাকিদের চেয়ে একটু বেশি ঘন ঘন আসে। এই ত্রুটিটিকে বলা হয় modulo bias, আর এটি নিছক তাত্ত্বিক নয়, বরং পরিমাপযোগ্য। এই জেনারেটরটি এর বদলে পরিসরের সবচেয়ে বড় নির্ভুল গুণিতকের বাইরের যেকোনো মান বাদ দিয়ে আবার নতুন করে তৈরি করে — এই কৌশলটির নাম rejection sampling। এতে কয়েকটি অতিরিক্ত চেষ্টা লাগে, কিন্তু বিনিময়ে একটি সম্পূর্ণ নিশ্চয়তা পাওয়া যায়: 'সর্বনিম্ন' এবং 'সর্বোচ্চ'-এর মধ্যে প্রতিটি সংখ্যার সম্ভাবনা সম্পূর্ণ সমান থাকে, প্রায় সমান নয়।

একটি সংখ্যাকে আসলে কী সত্যিকারের এলোমেলো করে তোলে? একটি ফলাফলকে যথেষ্ট এলোমেলো বলা যায় তখনই, যখন আগের ফলাফলগুলো পরেরটি সম্পর্কে কিছুই বলে না — আর বাস্তবে এর তিনটি স্তর আছে। Math.random()-এর মতো একটি সাধারণ সিউডো-র‍্যান্ডম ফাংশন একটি নির্দিষ্ট (deterministic) অ্যালগরিদম চালায়: এর ভেতরের অবস্থা যে কেউ জেনে ফেললে পুরো ধারাবাহিকতা পুনরায় তৈরি করতে পারবে, যা একটি স্লাইডশো এলোমেলো করার জন্য ঠিক আছে, কিন্তু যেখানে ফলাফল অনুমানযোগ্য হওয়া চলবে না, সেখানে এটি একেবারেই অনুপযুক্ত। একটি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত জেনারেটর (CSPRNG) — এই টুলটি যে স্তর ব্যবহার করে — সেটিও একটি অ্যালগরিদম, কিন্তু এটি সিস্টেমের একটি সুরক্ষিত এলোমেলোতার উৎস ব্যবহার করে অনুমান করা যায় না এমন মান তৈরি করার জন্য বানানো হয়েছে, আর এমনভাবে গঠন করা যে এর আউটপুট দেখলেও পরের মান সম্পর্কে কিছুই বোঝা যায় না। বায়ুমণ্ডলীয় শব্দ বা তেজস্ক্রিয় ক্ষয়ের মতো উৎস থেকে আসা প্রাকৃতিক এলোমেলোতা এই দুই স্তরের চেয়েও ওপরে থাকে, যদিও একটি পরিসর থেকে সংখ্যা তৈরি করার ক্ষেত্রে ব্যবহারিক পার্থক্যটা মিলিয়ে যায়। ঠিক এই কারণেই ব্রাউজারগুলো শুধু Math.random()-কে উন্নত না করে আলাদা একটি ক্রিপ্টো API সামনে আনে: এই দুটি ভিন্ন সমস্যার সমাধান করে, আর ফলাফল কারও কাছে গুরুত্বপূর্ণ হলে শুধু একটিই নিরাপদ।

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

এই র‍্যান্ডম নম্বর জেনারেটরটি কেন বেছে নেবেন?

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

এই জেনারেটরের কিছু সৎ সীমাবদ্ধতা আছে, যেগুলো জানা দরকার। 'পুনরাবৃত্তি ছাড়া' মোড পরিসরে যা আছে তার চেয়ে বেশি সংখ্যা তৈরি করতে পারে না: ১ থেকে ১০-এর মধ্যে বিশটি অনন্য মান আসলে থাকেই না। ড্রগুলো স্বাধীন, আর আগের ফলাফল পরেরগুলোকে প্রভাবিত করে না, তাই পেজ রিফ্রেশ করলে কোনো চক্র নতুন করে শুরু হয় না — কারণ এমন কোনো চক্রই নেই, যার মধ্যে আপনি থাকতে পারেন। আর সংখ্যাগুলো ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী হলেও, এখানকার ড্র একটি ভবিষ্যদ্বাণী নয়, বরং একটি ন্যায্য পছন্দ: সরকারি লটারির ড্র নিজস্ব শারীরিক বা প্রত্যায়িত সরঞ্জাম ব্যবহার করে, আর আপনার ব্রাউজারে হিসাব করা কোনো কিছুরই তার সঙ্গে কোনো সম্পর্ক নেই। এই সীমাবদ্ধতার মধ্যেও নিশ্চয়তাটি শক্তিশালী থাকে: আপনার পরিসরের প্রতিটি সংখ্যার প্রতিটি আলাদা ড্রয়ে সম্পূর্ণ সমান সম্ভাবনা থাকে।

FAQ

এলোমেলোতা কি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত?

আপনার ব্রাউজারের Web Crypto API (crypto.getRandomValues) ব্যবহার করা হয়, যা আপনার অপারেটিং সিস্টেমের ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত উৎস থেকে এলোমেলোতা নেয়। সাধারণ সিউডো-র‍্যান্ডম ফাংশনের থেকে আলাদা, এর আউটপুট বাস্তবে অনুমান করা যায় না এমনভাবে বানানো, আর rejection sampling সবচেয়ে ছোট মানকে প্রাধান্য না দিয়ে পরিসরের প্রতিটি সংখ্যার জন্য সমান সম্ভাবনা বজায় রাখে।

নির্দিষ্ট একটি পরিসরে কীভাবে একটি এলোমেলো সংখ্যা তৈরি করব?

'সর্বনিম্ন' ঘরে সবচেয়ে ছোট সম্ভাব্য মান এবং 'সর্বোচ্চ' ঘরে সবচেয়ে বড় মান লিখুন, তারপর 'তৈরি করুন'-এ ক্লিক করুন। উভয় প্রান্তই ফলাফলে অন্তর্ভুক্ত হয়, তাই ১ থেকে ১০ পরিসরে ১ এবং ১০ — দুটোই আসতে পারে।

একসাথে একাধিক এলোমেলো সংখ্যা তৈরি করা যায়?

হ্যাঁ। 'সংখ্যা' ঘরে আপনার প্রয়োজনীয় সংখ্যা বসান (১০০০ পর্যন্ত), আর জেনারেটরটি এক ক্লিকেই পুরো তালিকা তৈরি করে দেবে। এরপর কপি বাটন দিয়ে সব ফলাফল ক্লিপবোর্ডে কপি করতে পারেন, বা একটি ফাইলে সংরক্ষণ করতে পারেন।

একসাথে সংখ্যার একাধিক সেট তৈরি করা যায়?

হ্যাঁ। 'আউটপুট ফরম্যাট'-কে 'নতুন লাইন' থেকে 'স্পেস দিয়ে পৃথক' বা 'কমা দ্বারা পৃথক'-এ পাল্টান, তাহলে 'সেটের সংখ্যা' ঘরটি দেখা যাবে। এটিকে আপনার প্রয়োজনীয় স্বাধীন ড্রয়ের সংখ্যা অনুযায়ী সেট করুন — যেমন বিশটি ড্র রাউন্ডের জন্য প্রতিটিতে ৩টি করে সংখ্যার বিশটি সেট — আর ঠিক করুন যে একই সংখ্যা বিভিন্ন সেটের মধ্যে পুনরাবৃত্তি হতে পারবে কিনা।

তৈরি হওয়া সংখ্যাগুলো সাজানো যায়?

হ্যাঁ। প্রতিটি তালিকাকে ঊর্ধ্বক্রম বা নিম্নক্রমে সাজাতে 'ক্রমবিন্যাস' অপশনটি ব্যবহার করুন, অথবা সংখ্যাগুলোকে যে ক্রমে তৈরি হয়েছিল সেভাবে রাখতে এটি 'কোনোটি না'-তেই রেখে দিন।

পুনরাবৃত্ত সংখ্যা কীভাবে এড়ানো যায়?

'পুনরাবৃত্তি ছাড়া' সুইচটি চালু করুন। এটি চালু থাকলে, তালিকার প্রতিটি তৈরি হওয়া সংখ্যা আলাদা হয় — এটি ড্র, পুরস্কারের ড্র, বা মানুষকে দলে ভাগ করার জন্য একদম উপযুক্ত। মনে রাখবেন, সংখ্যাটি পরিসরের আকারের চেয়ে বেশি হতে পারবে না: আপনি ১ থেকে ১০-এর মধ্যে ২০টি অনন্য সংখ্যা তৈরি করতে পারবেন না।

একই সংখ্যা কেন বারবার আসতে থাকে?

কারণ স্বাধীন ড্র বারবার আসতেই পারে, আর এলোমেলোতা দেখতে ঠিক এমনই লাগে। প্রতিটি ড্র তার আগের সব ড্রকে সম্পূর্ণভাবে উপেক্ষা করে, তাই ১ থেকে ১০-এর একটি পরিসরে একই সংখ্যা পরপর দুবার আসার সম্ভাবনা প্রতিবারই ১০-এ ১ — এটি স্বাভাবিক, নষ্ট নয়। পুনরাবৃত্তিহীন তালিকা দরকার হলে, 'পুনরাবৃত্তি ছাড়া' চালু করুন; এটি কোনো ত্রুটি ঠিক করে না, বরং ইচ্ছাকৃতভাবে ড্রকে সীমাবদ্ধ করে।

একটি এলোমেলো ধারাবাহিকতা কেন এলোমেলো দেখায় না?

কারণ প্রকৃত এলোমেলোতা অনুমান করা যায় না, সমানভাবে ছড়িয়ে থাকে না। মানুষ আশা করে একটি এলোমেলো ফলাফল গোছানোভাবে ছড়িয়ে থাকবে, তাই গুচ্ছ, পুনরাবৃত্তি এবং ৭, ৭, ৮-এর মতো ছোট ধারা ভুল বলে মনে হয়, যদিও এগুলোই আসলে এলোমেলোতা তৈরি করে। মানুষের কাছে গোছানো দেখায় এমন একটি ধারাবাহিকতা সাধারণত এলোমেলো ছিল না।

ব্রাউজারে তৈরি এলোমেলোতাকে বিশ্বাস করা যায়?

হ্যাঁ, যখন এটি Web Crypto API থেকে আসে, যেমনটা এখানে হচ্ছে। crypto.getRandomValues ব্রাউজারের অন্তর্নিহিত সিস্টেম এলোমেলোতা ব্যবহার করে ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী এলোমেলো মান দেয়, Math.random()-এর মতো কোনো JavaScript PRNG দিয়ে নয়। সত্যিই গুরুত্বপূর্ণ কোনো কিছুর জন্য যাকে বিশ্বাস করা উচিত নয়, সেটি হলো Math.random(): এটি নির্দিষ্ট (deterministic), আর কখনো অনুমান করা যায় না এমনভাবে বানানো হয়নি।

এলোমেলো সংখ্যাগুলো অনুমান করা বা প্রভাবিত করা যায়?

এখানে যায় না। মানগুলো আপনার অপারেটিং সিস্টেমের ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত জেনারেটর থেকে আসে, তাই আগের ফলাফল দেখলেও পরেরটি সম্পর্কে কিছুই বোঝা যায় না, আর ড্রটি সম্পূর্ণভাবে আপনার ডিভাইসেই ঘটে — নাক গলানোর মতো কোনো সার্ভার নেই, আর ধরে ফেলার মতো কোনো রিকোয়েস্টও নেই। আমরাও আপনার ফলাফল প্রভাবিত করতে পারি না, কারণ আমরা সেগুলো কখনো দেখিই না।

উপহার বা ড্রয়ের বিজয়ী বাছাই করার জন্য এটি উপযুক্ত?

হ্যাঁ। প্রতিটি অংশগ্রহণকারীকে একটি সংখ্যা দিন, ওই পরিসরে একটি ফলাফল তৈরি করুন, আর যার সংখ্যা মিলে যায় সেই অংশগ্রহণকারী জেতেন। উৎসটি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত এবং ড্রটি সম্পূর্ণভাবে আপনার ডিভাইসেই ঘটে বলে, কোনো অংশগ্রহণকারী ফলাফল নিয়ে প্রশ্ন তুললে প্রক্রিয়াটি ব্যাখ্যা ও প্রমাণ করা সহজ। লটারির টিকিটের জন্য সংখ্যা বাছাই করলে, এই টুলটি একটি এলোমেলো নির্বাচনের মাধ্যম হিসেবে কাজ করে, কোনো ভবিষ্যদ্বাণী হিসেবে নয়: সরকারি লটারির ড্রয়ের সঙ্গে এর কোনো সম্পর্ক নেই।

পেজ রিফ্রেশ করলে এলোমেলোতা বদলে যায়?

না, আর এটার দরকারও নেই। প্রতিটি ড্র এমনিতেই অপারেটিং সিস্টেম থেকে নতুন এলোমেলো মান চায়, তাই 'তৈরি করুন'-এ পরপর দশবার ক্লিক করলেও অথবা প্রতিবার ক্লিকের মাঝে পেজ রিলোড করলেও ফলাফল স্বাধীনই থাকে। নতুন করে শুরু করার মতো কোনো চক্র নেই, আর পুরনো হয়ে যাওয়ার মতো কোনো অবস্থাও নেই — রিফ্রেশ করলে শুধু স্ক্রিনে দেখানো ফলাফলগুলো মুছে যায়।

জেনারেটরটি কি বিনামূল্যে, আর আপনারা কি আমার সংখ্যা সংরক্ষণ করেন?

টুলটি সম্পূর্ণ বিনামূল্যে, আর কোনো সাইন-আপের দরকার নেই। সব সংখ্যা আপনার ব্রাউজারেই স্থানীয়ভাবে তৈরি হয় এবং কখনো আপনার ডিভাইস ছেড়ে যায় না, তাই চাইলেও আমরা আপনার ফলাফল সংরক্ষণ বা দেখতে পারব না।