Skip to content

uid

生成唯一的标识符(UID),支持自定义长度和字符集。

基础用法

typescript
import { uid } from 'radash'

console.log(uid()) // 'abc123def456'
console.log(uid(8)) // 'a1b2c3d4'
console.log(uid(16, '0123456789')) // '1234567890123456'

语法

typescript
function uid(length?: number, chars?: string): string

参数

  • length (number, 可选): 生成的UID长度,默认为12
  • chars (string, 可选): 用于生成UID的字符集,默认为字母和数字

返回值

返回一个唯一的字符串标识符。

示例

基本用法

typescript
import { uid } from 'radash'

// 使用默认参数
console.log(uid()) // 'abc123def456'

// 指定长度
console.log(uid(8)) // 'a1b2c3d4'
console.log(uid(16)) // 'abc123def456ghi7'

// 指定字符集
console.log(uid(10, '0123456789')) // '1234567890'
console.log(uid(6, 'ABCDEF')) // 'ABCDEF'

生成不同长度的UID

typescript
import { uid } from 'radash'

// 短UID
console.log(uid(4)) // 'a1b2'

// 中等长度UID
console.log(uid(8)) // 'a1b2c3d4'

// 长UID
console.log(uid(16)) // 'abc123def456ghi7'

// 超长UID
console.log(uid(32)) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012'

使用不同字符集

typescript
import { uid } from 'radash'

// 只使用数字
console.log(uid(8, '0123456789')) // '12345678'

// 只使用大写字母
console.log(uid(8, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')) // 'ABCDEFGH'

// 只使用小写字母
console.log(uid(8, 'abcdefghijklmnopqrstuvwxyz')) // 'abcdefgh'

// 使用特殊字符
console.log(uid(8, '!@#$%^&*()')) // '!@#$%^&*'

// 使用十六进制字符
console.log(uid(8, '0123456789abcdef')) // 'a1b2c3d4'

// 使用Base64字符
console.log(uid(8, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')) // 'AbCdEfGh'

生成唯一标识符

typescript
import { uid } from 'radash'

// 生成用户ID
const userId = uid(8)
console.log(userId) // 'a1b2c3d4'

// 生成会话ID
const sessionId = uid(16)
console.log(sessionId) // 'abc123def456ghi7'

// 生成订单号
const orderNumber = uid(12, '0123456789')
console.log(orderNumber) // '123456789012'

// 生成API密钥
const apiKey = uid(32)
console.log(apiKey) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012'

生成文件名

typescript
import { uid } from 'radash'

// 生成临时文件名
const tempFileName = `temp_${uid(8)}.txt`
console.log(tempFileName) // 'temp_a1b2c3d4.txt'

// 生成上传文件名
const uploadFileName = `upload_${uid(12)}.jpg`
console.log(uploadFileName) // 'upload_abc123def456.jpg'

// 生成备份文件名
const backupFileName = `backup_${uid(16)}_${new Date().toISOString().split('T')[0]}.zip`
console.log(backupFileName) // 'backup_abc123def456ghi7_2023-12-31.zip'

生成数据库ID

typescript
import { uid } from 'radash'

// 生成用户表ID
const userTableId = uid(8, '0123456789')
console.log(userTableId) // '12345678'

// 生成产品表ID
const productTableId = uid(12, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
console.log(productTableId) // 'ABC123DEF456'

// 生成订单表ID
const orderTableId = uid(16, '0123456789ABCDEF')
console.log(orderTableId) // '1234567890ABCDEF'

生成令牌

typescript
import { uid } from 'radash'

// 生成访问令牌
const accessToken = uid(32)
console.log(accessToken) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012'

// 生成刷新令牌
const refreshToken = uid(64)
console.log(refreshToken) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012abc123def456ghi7jkl890mno123pqr456stu789vwx012'

// 生成验证码
const verificationCode = uid(6, '0123456789')
console.log(verificationCode) // '123456'

// 生成邀请码
const inviteCode = uid(8, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
console.log(inviteCode) // 'ABC12345'

生成游戏ID

typescript
import { uid } from 'radash'

// 生成玩家ID
const playerId = uid(8, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
console.log(playerId) // 'ABC12345'

// 生成房间ID
const roomId = uid(6, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
console.log(roomId) // 'ABCDEF'

// 生成游戏会话ID
const gameSessionId = uid(16)
console.log(gameSessionId) // 'abc123def456ghi7'

// 生成道具ID
const itemId = uid(12, '0123456789ABCDEF')
console.log(itemId) // '123456789ABC'

生成测试数据

typescript
import { uid } from 'radash'

// 生成测试用户数据
const testUsers = Array.from({ length: 5 }, () => ({
  id: uid(8),
  name: `User_${uid(4)}`,
  email: `user_${uid(6)}@example.com`
}))

console.log(testUsers)
// [
//   { id: 'a1b2c3d4', name: 'User_a1b2', email: 'user_a1b2c3@example.com' },
//   { id: 'e5f6g7h8', name: 'User_e5f6', email: 'user_e5f6g7@example.com' },
//   ...
// ]

// 生成测试产品数据
const testProducts = Array.from({ length: 3 }, () => ({
  id: uid(12, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'),
  name: `Product_${uid(6)}`,
  sku: uid(8, '0123456789')
}))

console.log(testProducts)
// [
//   { id: 'ABC123DEF456', name: 'Product_a1b2c3', sku: '12345678' },
//   { id: 'GHI789JKL012', name: 'Product_d4e5f6', sku: '87654321' },
//   ...
// ]

生成缓存键

typescript
import { uid } from 'radash'

// 生成Redis缓存键
const cacheKey = `user:${uid(8)}:profile`
console.log(cacheKey) // 'user:a1b2c3d4:profile'

// 生成会话缓存键
const sessionKey = `session:${uid(16)}`
console.log(sessionKey) // 'session:abc123def456ghi7'

// 生成API缓存键
const apiCacheKey = `api:users:${uid(12)}:data`
console.log(apiCacheKey) // 'api:users:abc123def456:data'

生成文件路径

typescript
import { uid } from 'radash'

// 生成上传文件路径
const uploadPath = `/uploads/${uid(8)}/${uid(12)}.jpg`
console.log(uploadPath) // '/uploads/a1b2c3d4/abc123def456.jpg'

// 生成临时文件路径
const tempPath = `/tmp/${uid(16)}_${Date.now()}.tmp`
console.log(tempPath) // '/tmp/abc123def456ghi7_1704067200000.tmp'

// 生成备份文件路径
const backupPath = `/backups/${uid(12)}_${new Date().toISOString().split('T')[0]}.zip`
console.log(backupPath) // '/backups/abc123def456_2023-12-31.zip'

生成URL参数

typescript
import { uid } from 'radash'

// 生成跟踪参数
const trackingParams = `utm_source=email&utm_medium=newsletter&utm_campaign=${uid(8)}`
console.log(trackingParams) // 'utm_source=email&utm_medium=newsletter&utm_campaign=a1b2c3d4'

// 生成API请求ID
const requestId = uid(16)
const apiUrl = `https://api.example.com/users?request_id=${requestId}`
console.log(apiUrl) // 'https://api.example.com/users?request_id=abc123def456ghi7'

// 生成下载链接
const downloadToken = uid(32)
const downloadUrl = `https://example.com/download?token=${downloadToken}`
console.log(downloadUrl) // 'https://example.com/download?token=abc123def456ghi7jkl890mno123pqr456stu789vwx012'

生成数据库记录

typescript
import { uid } from 'radash'

// 生成用户记录
const userRecord = {
  id: uid(8),
  username: `user_${uid(6)}`,
  email: `user_${uid(8)}@example.com`,
  createdAt: new Date(),
  updatedAt: new Date()
}

console.log(userRecord)
// {
//   id: 'a1b2c3d4',
//   username: 'user_a1b2c3',
//   email: 'user_a1b2c3d4@example.com',
//   createdAt: 2023-12-31T12:00:00.000Z,
//   updatedAt: 2023-12-31T12:00:00.000Z
// }

// 生成订单记录
const orderRecord = {
  id: uid(12, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'),
  customerId: uid(8),
  orderNumber: `ORD-${uid(8, '0123456789')}`,
  total: Math.random() * 1000,
  status: 'pending'
}

console.log(orderRecord)
// {
//   id: 'ABC123DEF456',
//   customerId: 'a1b2c3d4',
//   orderNumber: 'ORD-12345678',
//   total: 456.78,
//   status: 'pending'
// }

生成测试用例

typescript
import { uid } from 'radash'

// 生成测试用例ID
const testCaseId = uid(8)
const testCase = {
  id: testCaseId,
  name: `Test Case ${testCaseId}`,
  description: `Automated test case ${testCaseId}`,
  steps: [
    `Step 1: Navigate to ${uid(6)}`,
    `Step 2: Click on ${uid(4)}`,
    `Step 3: Verify ${uid(8)}`
  ]
}

console.log(testCase)
// {
//   id: 'a1b2c3d4',
//   name: 'Test Case a1b2c3d4',
//   description: 'Automated test case a1b2c3d4',
//   steps: [
//     'Step 1: Navigate to a1b2c3',
//     'Step 2: Click on d4e5',
//     'Step 3: Verify f6g7h8i9'
//   ]
// }

生成配置标识符

typescript
import { uid } from 'radash'

// 生成环境标识符
const environmentId = uid(8, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
console.log(environmentId) // 'ABCDEFGH'

// 生成部署标识符
const deploymentId = uid(16)
console.log(deploymentId) // 'abc123def456ghi7'

// 生成版本标识符
const versionId = uid(12, '0123456789ABCDEF')
console.log(versionId) // '123456789ABC'

// 生成配置哈希
const configHash = uid(32)
console.log(configHash) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012'

生成安全标识符

typescript
import { uid } from 'radash'

// 生成密码重置令牌
const resetToken = uid(32)
console.log(resetToken) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012'

// 生成邮箱验证令牌
const emailToken = uid(24)
console.log(emailToken) // 'abc123def456ghi7jkl890mno123'

// 生成双因素认证码
const twoFactorCode = uid(6, '0123456789')
console.log(twoFactorCode) // '123456'

// 生成API密钥
const apiSecret = uid(64)
console.log(apiSecret) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012abc123def456ghi7jkl890mno123pqr456stu789vwx012'

生成日志标识符

typescript
import { uid } from 'radash'

// 生成请求ID
const requestId = uid(16)
console.log(requestId) // 'abc123def456ghi7'

// 生成会话ID
const sessionId = uid(24)
console.log(sessionId) // 'abc123def456ghi7jkl890mno123'

// 生成错误ID
const errorId = uid(12, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
console.log(errorId) // 'ABC123DEF456'

// 生成追踪ID
const traceId = uid(32)
console.log(traceId) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012'

注意事项

  1. 唯一性: 生成的UID在统计上是唯一的,但理论上可能存在重复
  2. 字符集: 字符集越大,重复的概率越小
  3. 长度: 长度越长,唯一性越好
  4. 性能: 生成速度很快,适合高频使用
  5. 安全性: 不包含敏感信息,适合公开使用

与其他方法的区别

  • uid(): 生成唯一标识符
  • random(): 生成随机数
  • draw(): 从数组中随机选择元素
  • shuffle(): 随机打乱数组

实际应用场景

  1. 数据库ID: 生成唯一的主键
  2. 会话管理: 生成会话标识符
  3. 文件命名: 生成唯一的文件名
  4. API令牌: 生成访问令牌
  5. 测试数据: 生成测试用例标识符
  6. 缓存键: 生成缓存标识符
  7. 追踪ID: 生成请求追踪标识符

Released under the MIT License.