经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
JS生成唯一id方式之UUID和NanoID
来源:jb51  时间:2021/12/17 14:05:53  对本文有异议

前言:

唯一id有了更好的方式,那就是NanoID,今天这篇文章记录一下NanoID 正在取代 UUID?及js 生成uuid及NanoID的方法。

一、为什么 NanoID 正在取代 UUID

1、.更安全 在大多数随机生成器中,它们使用不安全的 Math.random() 。但是,NanoID 使用 crypto module 和 Web Crypto API,意味着 NanoID 更安全。 此外,NanoID 在 ID 生成器的实现过程中使用了自己的算法,称为 统一算法,而不是使用“随机 % 字母表” random % alphabet

2、 它既快速又紧凑 NanoIDUUID 快 60%。与 UUID 字母表中的 36 个字符不同,NanoID 只有 21 个字符。

此外,NanoID 支持 14 种不同的编程语言,它们分别是:

  1. C#、C++、Clojure 和 ClojureScript、Crystal、Dart & Flutter、Deno、Go、Elixir、Haskell、Janet、Java、Nim、Perl、PHP、带字典的 Python、Ruby、Rust、Swift
  2.  
  3.  

3、兼容性

它还支持 PouchDBCouchDB WebWorkersRollup 以及 React Reach-Native 等库。 我们可以使用 npx nanoid 在终端中获得唯一 ID。

二、js如何生成

我们看下他们都是如何用js生成的

首先说下,之前我们是如何生成uuid

方法一:

  1. function guid() {
  2. return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
  3. var r = Math.random() * 16 | 0,
  4. v = c == 'x' ? r : (r & 0x3 | 0x8);
  5. return v.toString(16);
  6. });
  7. }
  8. guid() // "a1ca0f7b-51bd-4bf3-a5d5-6a74f6adc1c7"
  9.  
  10.  

方法二:

  1. var _S4 = function() {
  2. return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
  3. }
  4.  
  5. // 获取广告请求唯一ID 方式是当前时间戳+13位随机吗
  6. export function GetsingleId() {
  7. var _res = (_S4() + _S4() + '-' + _S4() + '-' + _S4() + '-' + _S4() + '-' + _S4() + _S4() + _S4())
  8. return '_' + config.version + '_' + _res
  9. }
  10.  
  11.  

方法三:

  1. function uuid() {
  2. var s = [];
  3. var hexDigits = "0123456789abcdef";
  4. for (var i = 0; i < 36; i++) {
  5. s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
  6. }
  7. s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
  8. s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
  9. s[8] = s[13] = s[18] = s[23] = "-";
  10.  
  11. var uuid = s.join("");
  12. return uuid;
  13. }
  14. uuid() // "ffb7cefd-02cb-4853-8238-c0292cf988d5"
  15.  
  16.  

三、NanoID的方式

  1. import { nanoid } from 'nanoid'
  2. let idA = nanoid() //=> "V1StGXR8_Z5jdHi6B-myT"
  3. //也可以指定生成字符串的长度
  4. let idB = nanoid(5)
  5.  
  6.  

主要可以通过npm包的形式安装,核心代码如下:

  1. let urlAlphabet =
  2. 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
  3.  
  4. let nanoid = (size = 21) => {
  5. let id = ''
  6. // A compact alternative for `for (var i = 0; i < step; i++)`.
  7. let i = size
  8. while (i--) {
  9. // `| 0` is more compact and faster than `Math.floor()`.
  10. id += urlAlphabet[(Math.random() * 64) | 0]
  11. }
  12. return id
  13. }

到此这篇关于JS生成唯一id方式之UUID和NanoID的文章就介绍到这了,更多相关JS生成唯一id方式内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号