https://github.com/chilts/yid
Simple ID generator. A timestamp plus random digits.
https://github.com/chilts/yid
id identifier nodejs
Last synced: about 1 year ago
JSON representation
Simple ID generator. A timestamp plus random digits.
- Host: GitHub
- URL: https://github.com/chilts/yid
- Owner: chilts
- Created: 2018-01-27T10:59:14.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2025-02-15T03:50:10.000Z (over 1 year ago)
- Last Synced: 2025-04-02T06:41:18.946Z (over 1 year ago)
- Topics: id, identifier, nodejs
- Language: JavaScript
- Homepage:
- Size: 11.7 KB
- Stars: 3
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: ReadMe.md
Awesome Lists containing this project
README
# yid #
## Synopsis ##
```js
const yid = require('yid')
console.log(yid())
// -> 1517049989798-7496988299172
```
A `yid` is:
* always 27 chars long
* has two parts:
* a timestamp
* a random string
* is of the form `\d{13}-\d{13}`
* starts off with `Date.now()`
* uses a substring of https://www.npmjs.com/package/math-random for the second part
## `yid.fromDate(d)` ##
Pass in a `Date` object, and get a yid back. This is great if you want to
timestamp something in the past or the future, rather than right now.
```js
const yid = require('yid')
// get the date at the start of the day
const date = new Date()
date.setUTCHours(0)
date.setUTCMinutes(0)
date.setUTCSeconds(0)
date.setUTCMilliseconds(0)
console.log(yid.fromDate(date))
// -> 1635984000000-4266433825250
```
## `yid.asDate(id)` ##
Returns the numbers from the first part of the `id` as a `Date()`.
```js
yid.asDate(id)
// -> Date: "2018-01-27T10:46:29.798Z"
```
## `yid.asEpoch(id)` ##
Returns the numbers from the first part of the `id` as a `Number()`.
```js
yid.asEpoch(id)
// -> Number: 1517049989798
```
## `yid.asRandom(id)` ##
Returns the random collection of digits from the second part of the `id`.
```js
yid.asRandom(id)
// -> "7496988299172"
```
## Why? ##
Why another ID generating library?
I already wrote [zid](https://www.npmjs.com/package/zid) and [flake](https://www.npmjs.com/package/flake) (a long time
ago) and they all have uses. The use for this one is to generate FAST but UNIQUE distributed IDs with no central server
to talk to and no co-ordination required.
A secondary property is that they are approximately sortable across servers.
I got the idea from Google Keep, since the notes have IDs as follows, whereby the first secion is just `Date.now()`:
* '1517050593526.6629835825', e.g. https://keep.google.com/u/1/#NOTE/1517050593526.6629835825
## Author ##
Andrew Chilton.
## License ##
ISC.