flash
cf71bab92d
This has been in the works for over a month and might break things because it's a very radical change. If it causes you to be unable to join chat, report it on the forum or try joining using the legacy chat on https://sockchat.flashii.net.
39 lines
901 B
JavaScript
39 lines
901 B
JavaScript
const MamiRandomInt = (min, max) => {
|
|
let ret = 0;
|
|
const range = max - min;
|
|
|
|
const bitsNeeded = Math.ceil(Math.log2(range));
|
|
if(bitsNeeded > 53)
|
|
return -1;
|
|
|
|
const bytesNeeded = Math.ceil(bitsNeeded / 8),
|
|
mask = Math.pow(2, bitsNeeded) - 1;
|
|
|
|
const bytes = new Uint8Array(bytesNeeded);
|
|
crypto.getRandomValues(bytes);
|
|
|
|
let p = (bytesNeeded - 1) * 8;
|
|
for(let i = 0; i < bytesNeeded; ++i) {
|
|
ret += bytes[i] * Math.pow(2, p);
|
|
p -= 8;
|
|
}
|
|
|
|
ret &= mask;
|
|
|
|
if(ret >= range)
|
|
return MamiRandomInt(min, max);
|
|
|
|
return min + ret;
|
|
};
|
|
|
|
const MamiUniqueStr = (() => {
|
|
const chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789';
|
|
|
|
return length => {
|
|
let str = '';
|
|
for(let i = 0; i < length; ++i)
|
|
str += chars[MamiRandomInt(0, chars.length)];
|
|
return str;
|
|
};
|
|
})();
|