-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathgenerateUniqueId.js
52 lines (42 loc) · 1.21 KB
/
generateUniqueId.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Only for classic HTML pages!!!
// eslint-disable-next-line no-unused-vars
function generateUniqueId({
length = 20,
useLetters = true,
useNumbers = true,
includeSymbols = [],
excludeSymbols = [],
} = {}) {
let letters = 'abcdefghijklmnopqrstuvwxyz';
let numbers = '0123456789';
let availableChars = [];
let lettersArr = [];
let numbersArr = [];
function getRandomNumber(limit) {
return Math.floor(Math.random() * limit).toString();
}
function filterSymbols(symbols, group) {
let newGroup = group;
symbols.forEach((symbol) => {
newGroup = newGroup.replace(symbol, '');
});
return newGroup;
}
function createId(charsPool, idLength) {
let id = '';
for (let i = 0; i < idLength; i += 1) {
id += charsPool[getRandomNumber(charsPool.length)];
}
return id;
}
if (useLetters) {
if (excludeSymbols.length) letters = filterSymbols(excludeSymbols, letters);
lettersArr = letters.split('');
}
if (useNumbers) {
if (excludeSymbols.length) numbers = filterSymbols(excludeSymbols, numbers);
numbersArr = numbers.split('');
}
availableChars = [...lettersArr, ...numbersArr, ...includeSymbols];
return createId(availableChars, length);
}