我想生成唯一 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);