js-shortid:優雅簡潔地實現短ID


優雅簡潔

短ID在實際運用中很廣泛, 其中比較典型的運用就是短地址。 市面上肯定有不少開源的生成短ID庫, 基於node.js的估計也不少。 鑒於本人已然是node.js的腦殘粉(本職java開發), 很多業余項目從前端到后端都基於javascript開發, 加上npm和bower的包管理以及grunt的打包工具, 在項目開發過程中體驗特別酸爽。 由於當時項目前后端都會用到短ID, 但沒找到合適的庫同時支持npm和bower的(可能孤陋寡聞). 因此自己樂此不疲地又造了個輪子js-shortid(夷,為什么會說呢?!). 下面主要介紹它的實現方案, 自認為比較優雅簡潔。

js-shortid

js-shortid是一個基本於node.js的開源短ID的產生器, 其生成的短ID滿足無序、不可預測、URL地址友好以及足夠短且據有唯一的基本特征。下面就是由它產生的實例,先感受一下:

R6zw8Hly
R6AhD4Jw
R6Cip4M3
R6Ej09A1
R6Fjw3Q4
R6FP04jv
R6IlvZRb
R6LCSXn8
R6NT1Syx
R6O8RN67

方案

js-shortid的實現方案很清淅且簡單,它由兩個字符串夠成——時間序號和(多個隨機數).

所謂時間序號,就是一個從某個時間點開始按照一定時間間隔有序遞增的數字,並用62進制表示。 js-shortid默認的起始時間是2016-04-11 8:00以毫秒為間隔遞增,即每一毫秒加1。當然,你可以根據實際需要設置起始時間和遞增間隔,如以秒,分,時為間隔進行遞增,間隔越大遞增就越慢,即ID的時間序號部分變長也會越慢,但同一時間間隔生產的序號是一樣的。在高並發或集群中,即便是1毫秒的時間間隔,其序號也是大有可能是一樣的。 所以就有了另一部份

所謂,其實是借用了安全領域的術語加鹽, 其一般會用於對加密后的密碼(如MD5)加鹽, 使其不可預測。 而這里也是使產生的短ID不可預測, 由多個隨機數組成的字符串,每個隨機數以62進制表示, 占兩個字符。 加多少取決於你的設置, 默認為2, 即兩個鹽,占四個字符。 所以,加的越多, 越難預測,同時使短ID更加接近於UUID(全局唯一性ID), 但ID就越長了。

一般來說, 如果時間序號以毫秒遞增並加4個,幾乎已然就是UUID了。畢竟一毫秒之內隨機產生的4個出現一模一樣的幾乎是不可能的了。

使用

  • node.js
var shortid=require('shortid');	
console.log(shortid.gen());
  • 瀏覽器
var sid = shortid.gen();
console.log(sid);

更多點贊,代碼,詳情請移步Github

最后

重要的東西放在最后(廣告)。

  1. OK的話,幫加個加星,加星又不會懷孕:github.com/zzzhan/js-shortid

  2. 本文使用Markdown Notes進行編輯,推薦大家使用,大家使用,使用,用:md.shapefly.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM