Last active
September 14, 2025 10:56
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * 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