از کجا شروع کنیم
بخوانید که تولیدکننده اعداد تصادفی چیست: تولیدکنندههای سختافزاری، شبهتصادفی و امن از نظر رمزنگاری، چرایی تکرار اعداد و امکاناتی که مرورگر ارائه میدهد. هنگامی که به جای توضیحات به خود اعداد نیاز دارید، تولیدکننده اعداد تصادفی آنها را در هر بازهای، با تکرار یا بدون تکرار، در مرورگر شما تولید میکند.
جایی که تولیدکنندهها بیصدا دچار خطا میشوند
داشتن یک منبع قوی تصادفی بودن تنها نیمی از کار است. نیمه دیگر، نگاشت مقادیر خام بر بازه مورد نظر شما است و این همان جایی است که بسیاری از تولیدکنندههای دستساز با شکست مواجه میشوند. محاسبه باقیمانده تقسیم مقدار بر اندازه بازه (عملگر پیمانه) روشی دمدستی به نظر میرسد، اما دارای سوگیری نامحسوس است: مگر اینکه اندازه بازه فضای مقادیر منبع را بهطور مساوی تقسیم کند، کوچکترین اعداد بازه کمی بیشتر از بقیه ظاهر میشوند. این نقص سوگیری پیمانهای (modulo bias) نامیده میشود. یک راهکار، نمونهگیری رد (rejection sampling) است: مقادیری را که در انتهای ناهموار باقی میمانند کنار بگذارید و دوباره مقدار بگیرید. تولیدکننده ما همین کار را انجام میدهد، بنابراین تمام اعداد در بازه انتخابی شما در هر بار تولید شانس برابری دارند.
همین استدلال میانبرهایی را که افراد در وهله اول به سراغشان میروند رد میکند. Math.random() هیچ تضمینی برای امنیت نمیدهد و توابع صفحات گسترده مانند RAND() و RANDBETWEEN() نیز در همین دستهاند: برای یک درهمریزی ساده مناسبند، اما برای هر چیزی که ممکن است مورد اعتراض قرار گیرد مناسب نیستند.
اعداد، فهرستها و تاس
تولیدکننده اعداد تصادفی اعدادی را از بازه تعیینشده توسط شما برمیگرداند. ابزار انتخاب تصادفی از فهرست روی فهرستی کار میکند که جایگذاری میکنید — نامها، شرکتکنندگان، گزینهها — تا هرگز مجبور نباشید اعداد را دستی با ردیفها تطبیق دهید. برای بازیهای رومیزی، ابزار ریختن تاس تاسها را میریزد و مجموع آنها را محاسبه میکند، و برای انتخاب بین دو گزینه، ابزار شیر یا خط کافی است. هنگامی که تصادفی بودن باید به جای تصمیمگیری از چیزی محافظت کند، از تولید کننده رمز عبور قوی استفاده کنید. تمام این ابزارها از همان منبع امن از نظر رمزنگاری در مرورگر شما بهره میبرند.