Skip to content

Instantly share code, notes, and snippets.

@Greenheart
Last active September 14, 2025 10:56
Show Gist options
  • Select an option

  • Save Greenheart/416312b7cc50591b41dfbfdff802155d to your computer and use it in GitHub Desktop.

Select an option

Save Greenheart/416312b7cc50591b41dfbfdff802155d to your computer and use it in GitHub Desktop.
Generate a short k-sortable ID with a given prefix. Useful for small amounts of IDs. Can generate up to 260 ids per prefix by default, and could be tweaked to support even more if needed.
/**
* Generate a short k-sortable ID with a given prefix. Useful for small amounts of IDs.
* Can generate up to 260 ids per prefix by default, and could be tweaked to support even more if needed.
*/
function getShortId(
prefix: 'd' | 's',
lowercase = 'abcdefghijklmnopqrstuvwxyz',
numbers = '0123456789',
) {
let letterIndex = 0
let numberIndex = 0
return function* generate() {
while (letterIndex < lowercase.length) {
// Use reminder back to the first number if we have used every value
let number = numbers[numberIndex % numbers.length]
numberIndex++
// Detect when the number loops back to the first value to increment the letter index
if (numberIndex > numbers.length - 1 && number === numbers[0]) {
letterIndex++
}
let letter = lowercase[letterIndex]
// If we have used all letters, break out from the generation
if (!letter) return ''
yield prefix + letter + number
}
}
}
const dimensionId = getShortId('d')
console.log(Array.from(dimensionId())) // ['da0', 'da1', 'da2', (...)]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment