2019年3月23日 星期六

用 Javascript 寫一個任意位元的亂數產生器


function random(maxnum) {
     // 將產生後的亂數用時間函數運算過, 傳回整數並把它限制在 {0, ..., 最大值-1} 之間:
     let srand = Math.floor(Math.random( )*maxnum) ^ new Date().getMilliseconds();
     return  srand % maxnum ;
}
function srandBits(bits) {
       // 產生任意位元數的亂數
        let r = bits % 8; // 以 8 位元為單位(次), 產生一個亂數
        let num = [ ];     // 初始化儲存陣列
        if (r > 0) {
               num.push(random(1 << r)); // 先產生餘數位元的亂數
               bits -= r;
        }
        while (bits > 0) { // 還剩下的位元數, 一次產生一個位元組(8 bits = 1 byte)的亂數
            num.push(random(256)); // 產生 8 位元的亂數, 0 <= 亂數 < 256
            bits -= 8; // 減掉每次產生的 8 位元
        }
        return num; // 傳回陣列
}
console.log("random:" + srandBits(32));

沒有留言: