123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /**
- * cuid.js
- * Collision-resistant UID generator for browsers and node.
- * Sequential for fast db lookups and recency sorting.
- * Safe for element IDs and server-side lookups.
- *
- * Extracted from CLCTR
- *
- * Copyright (c) Eric Elliott 2012
- * MIT License
- */
- var fingerprint = require('./lib/fingerprint.js');
- var pad = require('./lib/pad.js');
- var getRandomValue = require('./lib/getRandomValue.js');
- var c = 0,
- blockSize = 4,
- base = 36,
- discreteValues = Math.pow(base, blockSize);
- function randomBlock () {
- return pad((getRandomValue() *
- discreteValues << 0)
- .toString(base), blockSize);
- }
- function safeCounter () {
- c = c < discreteValues ? c : 0;
- c++; // this is not subliminal
- return c - 1;
- }
- function cuid () {
- // Starting with a lowercase letter makes
- // it HTML element ID friendly.
- var letter = 'c', // hard-coded allows for sequential access
- // timestamp
- // warning: this exposes the exact date and time
- // that the uid was created.
- timestamp = (new Date().getTime()).toString(base),
- // Prevent same-machine collisions.
- counter = pad(safeCounter().toString(base), blockSize),
- // A few chars to generate distinct ids for different
- // clients (so different computers are far less
- // likely to generate the same id)
- print = fingerprint(),
- // Grab some more chars from Math.random()
- random = randomBlock() + randomBlock();
- return letter + timestamp + counter + print + random;
- }
- cuid.slug = function slug () {
- var date = new Date().getTime().toString(36),
- counter = safeCounter().toString(36).slice(-4),
- print = fingerprint().slice(0, 1) +
- fingerprint().slice(-1),
- random = randomBlock().slice(-2);
- return date.slice(-2) +
- counter + print + random;
- };
- cuid.isCuid = function isCuid (stringToCheck) {
- if (typeof stringToCheck !== 'string') return false;
- if (stringToCheck.startsWith('c')) return true;
- return false;
- };
- cuid.isSlug = function isSlug (stringToCheck) {
- if (typeof stringToCheck !== 'string') return false;
- var stringLength = stringToCheck.length;
- if (stringLength >= 7 && stringLength <= 10) return true;
- return false;
- };
- cuid.fingerprint = fingerprint;
- module.exports = cuid;
|