Random Number Generator

This version of the generator creates a random integer. It can deal with very large integers up to a few thousand digits.

Calculator.net
Random Number Generator

Simple Version

Result

Comprehensive Version

Type of result to generate?
Results
(function(){ function initRng(){ function randUnit(){ if(window.crypto && crypto.getRandomValues){ const u=new Uint32Array(1); crypto.getRandomValues(u); return u[0]/4294967296; } return Math.random(); } function randInt(min,max){ min=Math.ceil(min); max=Math.floor(max); const range=max-min+1; if(range<=0) throw new Error("bad range"); if(window.crypto && crypto.getRandomValues){ const maxUint=0xFFFFFFFF; const limit=Math.floor(maxUint/range)*range; const u=new Uint32Array(1); let x; do{ crypto.getRandomValues(u); x=u[0]; }while(x>=limit); return min+(x%range); } return min+Math.floor(Math.random()*range); } function swap(a,b){ return a<=b ? [a,b] : [b,a]; } document.querySelectorAll(".rng-wrap").forEach((wrap, idx) => { // Unique radio groups wrap.querySelectorAll(‘input[type=”radio”][data-type]’).forEach(r => { r.name = “rngType_” + idx; }); wrap.querySelectorAll(“[data-rng]”).forEach(section => { const lowEl = section.querySelector(“[data-low]”); const highEl = section.querySelector(“[data-high]”); const resultEl = section.querySelector(“[data-result]”); const errEl = section.querySelector(“[data-error]”); const countEl = section.querySelector(“[data-count]”); const precEl = section.querySelector(“[data-precision]”); const isComp = section.getAttribute(“data-rng”) === “comp”; const setError = (m)=> errEl.textContent = m || “”; const setResult = (t)=> resultEl.textContent = t; section.querySelector(“[data-generate]”).addEventListener(“click”, () => { setError(“”); setResult(“—”); const low = Number(lowEl.value); const high = Number(highEl.value); if(!Number.isFinite(low) || !Number.isFinite(high)){ setError(“Please enter valid numbers for both limits.”); return; } const [a,b] = swap(low,high); try{ if(!isComp){ setResult(String(randInt(a,b))); return; } const count = Number(countEl.value); const precision = Number(precEl.value); if(!Number.isFinite(count) || count<1 || count>1000){ setError(“Generate count must be between 1 and 1000.”); return; } if(!Number.isFinite(precision) || precision<0 || precision>200){ setError(“Precision must be between 0 and 200 digits.”); return; } const type = section.querySelector(‘input[type=”radio”][data-type]:checked’)?.value || “decimal”; const out = []; if(type === “integer”){ const minI = Math.ceil(a), maxI = Math.floor(b); if(minI > maxI){ setError(“For integers, limits must include at least one whole number.”); return; } for(let i=0;i { if(!isComp){ lowEl.value = 1; highEl.value = 100; } else { lowEl.value = 0.2; highEl.value = 112.5; countEl.value = 1; precEl.value = 50; section.querySelector(‘input[value=”decimal”][data-type]’).checked = true; } setResult(“—”); setError(“”); }); }); }); } // Run after everything + Elementor frontend if(document.readyState === “loading”){ document.addEventListener(“DOMContentLoaded”, initRng); } else { initRng(); } // Elementor sometimes loads content dynamically window.addEventListener(“elementor/frontend/init”, initRng); })();