我想生成唯一 ID
I want to generate unique ID
我想在 JavaScript 中生成唯一 ID。 uuid npm package 试过了,不错,但不是我想要的
例如,我从 uuid 包生成唯一 ID 得到的结果是
9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
有什么办法可以按照我的意愿制作特定的格式吗
例如我希望我的 ID 看起来像这样
XZ5678
在此示例中,格式是两个大写字母和 4 个数字。
就是这样,我正在寻找答案并提前谢谢大家。
你所建议的方式非常确定你会得到重复和碰撞,我强烈建议使用 uuid。
你也可能会发现这个有用:https://www.npmjs.com/package/short-uuid
或者,如果您想继续您的想法,这可能会有所帮助:Generate random string/characters in JavaScript
不确定你为什么想要这个模式,但你可以这样做:
const { floor, random } = Math;
function generateUpperCaseLetter() {
return randomCharacterFromArray('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
}
function generateNumber() {
return randomCharacterFromArray('1234567890');
}
function randomCharacterFromArray(array) {
return array[floor(random() * array.length)];
}
const identifiers = [];
function generateIdentifier() {
const identifier = [
...Array.from({ length: 2 }, generateUpperCaseLetter),
...Array.from({ length: 4 }, generateNumber)
].join('');
// This will get slower as the identifiers array grows, and will eventually lead to an infinite loop
return identifiers.includes(identifier) ? generateIdentifier() : identifiers.push(identifier), identifier;
}
const identifier = generateIdentifier();
console.log(identifier);
如果您只想根据该模式生成随机序列,则可以相对轻松地完成。为确保它的唯一性,您需要 运行 此函数,然后将其与 table 之前生成的 ID 进行匹配,以确保它尚未被使用。
在我下面的示例中,我创建了两个函数,getRandomLetters()
和 getRandomDigits()
其中 return 一串数字和字母传递给函数的参数的长度(默认为每个长度 1)。
然后,我创建了一个名为 generateUniqueID()
的函数,它根据您指定的格式生成一个新 ID。它会检查该 ID 是否已存在于现有 ID 的 table 中。如果是这样,它会进入一个 while 循环,循环直到创建一个新的唯一 ID,然后 returns 它的值。
const existingIDs = ['AA1111','XY1234'];
const getRandomLetters = (length = 1) => Array(length).fill().map(e => String.fromCharCode(Math.floor(Math.random() * 26) + 65)).join('');
const getRandomDigits = (length = 1) => Array(length).fill().map(e => Math.floor(Math.random() * 10)).join('');
const generateUniqueID = () => {
let id = getRandomLetters(2) + getRandomDigits(4);
while (existingIDs.includes(id)) id = getRandomLetters(2) + getRandomDigits(4);
return id;
};
const newID = generateUniqueID();
console.log(newID);
我想在 JavaScript 中生成唯一 ID。 uuid npm package 试过了,不错,但不是我想要的
例如,我从 uuid 包生成唯一 ID 得到的结果是
9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d
有什么办法可以按照我的意愿制作特定的格式吗
例如我希望我的 ID 看起来像这样
XZ5678
在此示例中,格式是两个大写字母和 4 个数字。
就是这样,我正在寻找答案并提前谢谢大家。
你所建议的方式非常确定你会得到重复和碰撞,我强烈建议使用 uuid。
你也可能会发现这个有用:https://www.npmjs.com/package/short-uuid
或者,如果您想继续您的想法,这可能会有所帮助:Generate random string/characters in JavaScript
不确定你为什么想要这个模式,但你可以这样做:
const { floor, random } = Math;
function generateUpperCaseLetter() {
return randomCharacterFromArray('ABCDEFGHIJKLMNOPQRSTUVWXYZ');
}
function generateNumber() {
return randomCharacterFromArray('1234567890');
}
function randomCharacterFromArray(array) {
return array[floor(random() * array.length)];
}
const identifiers = [];
function generateIdentifier() {
const identifier = [
...Array.from({ length: 2 }, generateUpperCaseLetter),
...Array.from({ length: 4 }, generateNumber)
].join('');
// This will get slower as the identifiers array grows, and will eventually lead to an infinite loop
return identifiers.includes(identifier) ? generateIdentifier() : identifiers.push(identifier), identifier;
}
const identifier = generateIdentifier();
console.log(identifier);
如果您只想根据该模式生成随机序列,则可以相对轻松地完成。为确保它的唯一性,您需要 运行 此函数,然后将其与 table 之前生成的 ID 进行匹配,以确保它尚未被使用。
在我下面的示例中,我创建了两个函数,getRandomLetters()
和 getRandomDigits()
其中 return 一串数字和字母传递给函数的参数的长度(默认为每个长度 1)。
然后,我创建了一个名为 generateUniqueID()
的函数,它根据您指定的格式生成一个新 ID。它会检查该 ID 是否已存在于现有 ID 的 table 中。如果是这样,它会进入一个 while 循环,循环直到创建一个新的唯一 ID,然后 returns 它的值。
const existingIDs = ['AA1111','XY1234'];
const getRandomLetters = (length = 1) => Array(length).fill().map(e => String.fromCharCode(Math.floor(Math.random() * 26) + 65)).join('');
const getRandomDigits = (length = 1) => Array(length).fill().map(e => Math.floor(Math.random() * 10)).join('');
const generateUniqueID = () => {
let id = getRandomLetters(2) + getRandomDigits(4);
while (existingIDs.includes(id)) id = getRandomLetters(2) + getRandomDigits(4);
return id;
};
const newID = generateUniqueID();
console.log(newID);