stringUtil.ts 1.16 KB
/**
 * UUID生成
 *
 * @param len   长度数值
 * @param radix 基数,如:2/10/16
 */
export const uuidGen = (len?: number, radix?: number) => {
  const chars: string[] =
    '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
  const uuid: string[] = [];
  let i: number;
  const radixNew = radix || chars.length;

  if (len) {
    // Compact form
    for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radixNew)];
  } else {
    // rfc4122, version 4 form
    let r;

    // rfc4122 requires these characters
    uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
    uuid[14] = '4';

    // Fill in random data.  At i==19 set the high bits of clock sequence as
    // per rfc4122, sec. 4.1.5
    for (i = 0; i < 36; i++) {
      if (!uuid[i]) {
        r = 0 | (Math.random() * 16);
        uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];
      }
    }
  }
  return uuid.join('');
};

/**
 * 唯一ID生成(小写,无'-'字符)
 *
 * @param prefix
 * @param len
 * @param radix
 */
export const uidGen = (prefix?: string, len?: number, radix?: number) => {
  return (prefix || '') + uuidGen(len, radix).replaceAll('-', '').toLowerCase();
};