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長度,默認為12chars
(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'
注意事項
- 唯一性: 生成的UID在統計上是唯一的,但理論上可能存在重復
- 字符集: 字符集越大,重復的概率越小
- 長度: 長度越長,唯一性越好
- 性能: 生成速度很快,適合高頻使用
- 安全性: 不包含敏感信息,適合公開使用
與其他方法的區別
uid()
: 生成唯一標識符random()
: 生成隨機數draw()
: 從數組中隨機選擇元素shuffle()
: 隨機打亂數組
實際應用場景
- 數據庫ID: 生成唯一的主鍵
- 會話管理: 生成會話標識符
- 文件命名: 生成唯一的文件名
- API令牌: 生成訪問令牌
- 測試數據: 生成測試用例標識符
- 緩存鍵: 生成緩存標識符
- 追蹤ID: 生成請求追蹤標識符