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.