Skip to content

uid

Generate a unique identifier (UID), supporting custom length and character set.

Basic Usage

typescript
import { uid } from 'radash'

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

Syntax

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

Parameters

  • length (number, optional): The length of the UID to generate, default is 12
  • chars (string, optional): The character set to use for generating the UID, default is letters and numbers

Return Value

Returns a unique string identifier.

Examples

Basic Usage

typescript
import { uid } from 'radash'

// Using default parameters
console.log(uid()) // 'abc123def456'

// Specify length
console.log(uid(8)) // 'a1b2c3d4'
console.log(uid(16)) // 'abc123def456ghi7'

// Specify character set
console.log(uid(10, '0123456789')) // '1234567890'
console.log(uid(6, 'ABCDEF')) // 'ABCDEF'

Generate UIDs of Different Lengths

typescript
import { uid } from 'radash'

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

// Medium length UID
console.log(uid(8)) // 'a1b2c3d4'

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

// Extra long UID
console.log(uid(32)) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012'

Using Different Character Sets

typescript
import { uid } from 'radash'

// Numbers only
console.log(uid(8, '0123456789')) // '12345678'

// Uppercase letters only
console.log(uid(8, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')) // 'ABCDEFGH'

// Lowercase letters only
console.log(uid(8, 'abcdefghijklmnopqrstuvwxyz')) // 'abcdefgh'

// Special characters
console.log(uid(8, '!@#$%^&*()')) // '!@#$%^&*'

// Hexadecimal characters
console.log(uid(8, '0123456789abcdef')) // 'a1b2c3d4'

// Base64 characters
console.log(uid(8, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')) // 'AbCdEfGh'

Generate Unique Identifiers

typescript
import { uid } from 'radash'

// Generate user ID
const userId = uid(8)
console.log(userId) // 'a1b2c3d4'

// Generate session ID
const sessionId = uid(16)
console.log(sessionId) // 'abc123def456ghi7'

// Generate order number
const orderNumber = uid(12, '0123456789')
console.log(orderNumber) // '123456789012'

// Generate API key
const apiKey = uid(32)
console.log(apiKey) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012'

Generate File Names

typescript
import { uid } from 'radash'

// Generate temporary file name
const tempFileName = `temp_${uid(8)}.txt`
console.log(tempFileName) // 'temp_a1b2c3d4.txt'

// Generate upload file name
const uploadFileName = `upload_${uid(12)}.jpg`
console.log(uploadFileName) // 'upload_abc123def456.jpg'

// Generate backup file name
const backupFileName = `backup_${uid(16)}_${new Date().toISOString().split('T')[0]}.zip`
console.log(backupFileName) // 'backup_abc123def456ghi7_2023-12-31.zip'

Generate Database IDs

typescript
import { uid } from 'radash'

// Generate user table ID
const userTableId = uid(8, '0123456789')
console.log(userTableId) // '12345678'

// Generate product table ID
const productTableId = uid(12, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
console.log(productTableId) // 'ABC123DEF456'

// Generate order table ID
const orderTableId = uid(16, '0123456789ABCDEF')
console.log(orderTableId) // '1234567890ABCDEF'

Generate Tokens

typescript
import { uid } from 'radash'

// Generate access token
const accessToken = uid(32)
console.log(accessToken) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012'

// Generate refresh token
const refreshToken = uid(64)
console.log(refreshToken) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012abc123def456ghi7jkl890mno123pqr456stu789vwx012'

// Generate verification code
const verificationCode = uid(6, '0123456789')
console.log(verificationCode) // '123456'

// Generate invitation code
const inviteCode = uid(8, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
console.log(inviteCode) // 'ABC12345'

Generate Game IDs

typescript
import { uid } from 'radash'

// Generate player ID
const playerId = uid(8, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
console.log(playerId) // 'ABC12345'

// Generate room ID
const roomId = uid(6, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
console.log(roomId) // 'ABCDEF'

// Generate game session ID
const gameSessionId = uid(16)
console.log(gameSessionId) // 'abc123def456ghi7'

// Generate item ID
const itemId = uid(12, '0123456789ABCDEF')
console.log(itemId) // '123456789ABC'

Generate Test Data

typescript
import { uid } from 'radash'

// Generate test user data
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' },
//   ...
// ]

// Generate test product data
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' },
//   ...
// ]

Generate Cache Keys

typescript
import { uid } from 'radash'

// Generate Redis cache key
const cacheKey = `user:${uid(8)}:profile`
console.log(cacheKey) // 'user:a1b2c3d4:profile'

// Generate session cache key
const sessionKey = `session:${uid(16)}`
console.log(sessionKey) // 'session:abc123def456ghi7'

// Generate API cache key
const apiCacheKey = `api:users:${uid(12)}:data`
console.log(apiCacheKey) // 'api:users:abc123def456:data'

Generate File Paths

typescript
import { uid } from 'radash'

// Generate upload file path
const uploadPath = `/uploads/${uid(8)}/${uid(12)}.jpg`
console.log(uploadPath) // '/uploads/a1b2c3d4/abc123def456.jpg'

// Generate temporary file path
const tempPath = `/tmp/${uid(16)}_${Date.now()}.tmp`
console.log(tempPath) // '/tmp/abc123def456ghi7_1704067200000.tmp'

// Generate backup file path
const backupPath = `/backups/${uid(12)}_${new Date().toISOString().split('T')[0]}.zip`
console.log(backupPath) // '/backups/abc123def456_2023-12-31.zip'

Generate URL Parameters

typescript
import { uid } from 'radash'

// Generate tracking parameters
const trackingParams = `utm_source=email&utm_medium=newsletter&utm_campaign=${uid(8)}`
console.log(trackingParams) // 'utm_source=email&utm_medium=newsletter&utm_campaign=a1b2c3d4'

// Generate API request 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'

// Generate download link
const downloadToken = uid(32)
const downloadUrl = `https://example.com/download?token=${downloadToken}`
console.log(downloadUrl) // 'https://example.com/download?token=abc123def456ghi7jkl890mno123pqr456stu789vwx012'

Generate Database Records

typescript
import { uid } from 'radash'

// Generate user record
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
// }

// Generate order record
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'
// }

Generate Test Cases

typescript
import { uid } from 'radash'

// Generate test case 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'
//   ]
// }

Generate Configuration Identifiers

typescript
import { uid } from 'radash'

// Generate environment identifier
const environmentId = uid(8, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
console.log(environmentId) // 'ABCDEFGH'

// Generate deployment identifier
const deploymentId = uid(16)
console.log(deploymentId) // 'abc123def456ghi7'

// Generate version identifier
const versionId = uid(12, '0123456789ABCDEF')
console.log(versionId) // '123456789ABC'

// Generate configuration hash
const configHash = uid(32)
console.log(configHash) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012'

Generate Security Identifiers

typescript
import { uid } from 'radash'

// Generate password reset token
const resetToken = uid(32)
console.log(resetToken) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012'

// Generate email verification token
const emailToken = uid(24)
console.log(emailToken) // 'abc123def456ghi7jkl890mno123'

// Generate two-factor authentication code
const twoFactorCode = uid(6, '0123456789')
console.log(twoFactorCode) // '123456'

// Generate API secret
const apiSecret = uid(64)
console.log(apiSecret) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012abc123def456ghi7jkl890mno123pqr456stu789vwx012'

Generate Log Identifiers

typescript
import { uid } from 'radash'

// Generate request ID
const requestId = uid(16)
console.log(requestId) // 'abc123def456ghi7'

// Generate session ID
const sessionId = uid(24)
console.log(sessionId) // 'abc123def456ghi7jkl890mno123'

// Generate error ID
const errorId = uid(12, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
console.log(errorId) // 'ABC123DEF456'

// Generate trace ID
const traceId = uid(32)
console.log(traceId) // 'abc123def456ghi7jkl890mno123pqr456stu789vwx012'

Notes

  1. Uniqueness: Generated UIDs are statistically unique, but theoretically may have duplicates
  2. Character Set: Larger character sets reduce the probability of duplicates
  3. Length: Longer lengths result in better uniqueness
  4. Performance: Generation is very fast, suitable for high-frequency use
  5. Security: Does not contain sensitive information, suitable for public use

Differences from Other Methods

  • uid(): Generates a unique identifier
  • random(): Generates a random number
  • draw(): Randomly selects an element from an array
  • shuffle(): Randomly shuffles an array

Practical Applications

  1. Database IDs: Generates unique primary keys
  2. Session Management: Generates session identifiers
  3. File Naming: Generates unique file names
  4. API Tokens: Generates access tokens
  5. Test Data: Generates test case identifiers
  6. Cache Keys: Generates cache identifiers
  7. Trace IDs: Generates request trace identifiers

Released under the MIT License.