js生成java uuid_JS生成UUID-程序员宅基地

技术标签: js生成java uuid  

一、UUID是什么

UUID就是Universal Unique IDentifier的缩写,它是一个128位,16字节的值,并确保在时间和空间上唯一。

它是把硬件地址、时间以及随机数结合在一起,它保证对在同一时空中的所有机器都是唯一的。

通常平台会提供生成UUID的API。UUID按照开放软件基金会 (OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID (Globals Unique Identifiers)。

一般情况下,生成算法用计算机网卡的地址和一个60位的timestamp生成,时间是以100ns为时间间隔。

例如,一台300PL 6862的计算机,主板集成的网卡的MAC地址为00-04-AC-2E-B7-DC,而UUID的最后六个字节也会是0004AC2EB7DC

一般我们都知道使用Java如何创建UUID,如下:

java类:java.util.UUID

UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID

import java.util.UUID;

public class TestGUID {

public static void main(String[] args) {//用main方法是为了测试方便

UUID uuid = UUID.randomUUID(); //实际项目中只有这句有用

System.out.println (uuid);

}

}

编译运行输出如:c9d6294f-0c62-453f-8626-68c7b0fc9769

二、JS生成UUID

如果想在js中使用uuid我们可以使用如下方法生成:

/*!

Math.uuid.js (v1.4)

http://www.broofa.com

mailto:[email protected]

Copyright (c) 2010 Robert Kieffer

Dual licensed under the MIT and GPL licenses.

*/

/*

* Generate a random uuid.

*

* USAGE: Math.uuid(length, radix)

* length - the desired number of characters

* radix - the number of allowable values for each character.

*

* EXAMPLES:

* // No arguments - returns RFC4122, version 4 ID

* >>> Math.uuid()

* "92329D39-6F5C-4520-ABFC-AAB64544E172"

*

* // One argument - returns ID of the specified length

* >>> Math.uuid(15) // 15 character ID (default base=62)

* "VcydxgltxrVZSTV"

*

* // Two arguments - returns ID of the specified length, and radix. (Radix must be <= 62)

* >>> Math.uuid(8, 2) // 8 character ID (base=2)

* "01001010"

* >>> Math.uuid(8, 10) // 8 character ID (base=10)

* "47473046"

* >>> Math.uuid(8, 16) // 8 character ID (base=16)

* "098F4D35"

*/

(function() {

// Private array of chars to use

var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');

Math.uuid = function (len, radix) {

var chars = CHARS, uuid = [], i;

radix = radix || chars.length;

if (len) {

// Compact form

for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];

} else {

// rfc4122, version 4 form

var r;

// rfc4122 requires these characters

uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';

uuid[14] = '4';

// Fill in random data. At i==19 set the high bits of clock sequence as

// per rfc4122, sec. 4.1.5

for (i = 0; i < 36; i++) {

if (!uuid[i]) {

r = 0 | Math.random()*16;

uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];

}

}

}

return uuid.join('');

};

// A more performant, but slightly bulkier, RFC4122v4 solution. We boost performance

// by minimizing calls to random()

Math.uuidFast = function() {

var chars = CHARS, uuid = new Array(36), rnd=0, r;

for (var i = 0; i < 36; i++) {

if (i==8 || i==13 || i==18 || i==23) {

uuid[i] = '-';

} else if (i==14) {

uuid[i] = '4';

} else {

if (rnd <= 0x02) rnd = 0x2000000 + (Math.random()*0x1000000)|0;

r = rnd & 0xf;

rnd = rnd >> 4;

uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];

}

}

return uuid.join('');

};

// A more compact, but less performant, RFC4122v4 solution:

Math.uuidCompact = function() {

return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {

var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);

return v.toString(16);

});

};

})();

三、JS中生成Guid

全局唯一标识符,简称GUID(发音为 /ˈɡuːɪd/或/ˈɡwɪd/),是一种由算法生成的唯一标识,通常表示成32个16进制数字(0-9,A-F)组成的字符串,如:{21EC2020-3AEA-1069-A2DD-08002B30309D},它实质上是一个128位长的二进制整数。GUID一词有时也专指微软对UUID标准的实现。

GUID的主要目的是产生完全唯一的数字。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID的总数也足够大,达到了2128(3.4×1038)个,所以随机生成两个相同GUID的可能性是非常小的,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。

下面是生成Guid代码实现,优点是代码量极少:

// Generate four random hex digits.

function S4() {

return (((1+Math.random())*0x10000)|0).toString(16).substring(1);

};

// Generate a pseudo-GUID by concatenating random hexadecimal.

function guid() {

return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());

};

下面是几种生成Guid的算法来自(http://www.cnblogs.com/snandy/p/3261754.html)

1、

function uuid() {

var s = [];

var hexDigits = "0123456789abcdef";

for (var i = 0; i < 36; i++) {

s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);

}

s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010

s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01

s[8] = s[13] = s[18] = s[23] = "-";

var uuid = s.join("");

return uuid;

}

2.

function guid() {

return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {

var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);

return v.toString(16);

});

}

3、

这个可以指定长度和基数:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_29784009/article/details/114317550

智能推荐

C#工程批量添加dll和脚本_c# 引用多个dll-程序员宅基地

文章浏览阅读513次。出于想在没有unity的环境下用unity的dll来写代码的目的(嗯,很sb的需求),自己建了个空的c#工程,再把动态库和代码放到工程目录下,用python脚本给工程文件批量添加dll和cs文件。1.分析  首先得知道在用Visual Studio给解决方案添加引用的dll和代码文件时都发生了什么。打开解决方案文件(.csproj)基本结构如下,可以看到其实就是个xml文件。看到最后会发现有两个ItemGroup节点,一个描述了项目所引用的dll,一个描述了项目所有的代码文件。所以,只需要写个工具修._c# 引用多个dll

【Hexo】Next主题添加全局播放翻页不间断的网易云音乐_hexo next部署音乐播放-程序员宅基地

文章浏览阅读1.5k次,点赞6次,收藏8次。前言网页预览:Qxiaofei69.github.io如果有想入手Hexo博客但没有任何思路,看网上资料一头雾水,推荐B站这个up主的入门教程传送门一、网易云外链打开网易云音乐,将喜欢的歌都加入歌单,然后点击生成外链调整插件的大小,这里建议第二个就可以了,不大不小,然后复制HTML代码二、插入代码打开/themes/next/layout/_macro/sidebar.swig文件在下图位置插入代码刚复制的代码鉴于每个人侧边栏位置不同,具体效果自行调整三、修改属性在Next主题_hexo next部署音乐播放

华为linux版本wifi驱动,Ubuntu安装无线网卡驱动 Wifi/BT BCM4330 (AP6383)-程序员宅基地

文章浏览阅读779次。像BCM4330 (AP6383)这样的Wifi/蓝牙一体化芯片常见于一些平板电脑、笔记本和mini pc中。特别是z3735、z8300、core m这些芯片的平板电脑很常见。AP6210也比较常见,但目前暂未解决其驱动问题。如何在搭载这样芯片的设备中安装Linux驱动呢?Ubuntu16.04版本的内核中仍然没有封装对应驱动(Ps:貌似Intel和Ubuntu合作,Intel NUC可以完美安..._ubuntu下华为无线路由器

html 找到背景图片路径,background-image中url找不到路径,背景图像无法显示-程序员宅基地

文章浏览阅读5.6k次。在对应的DIV中能够显示图片但是当把路径复制变成内联样式表中的background-image时候在原来图中却不能显示背景图片,在fireBUG中显示URL载入错误,这是怎么回事了?#body_left_secend_1 {width:293px;height:300px;background-image:url(../Images/images..._html中background-image的url报错

Win10离线安装.NET Framework 3.5的方法技巧(附离线安装包下载)_.net framework 3.5离线安装包-程序员宅基地

文章浏览阅读10w+次,点赞22次,收藏143次。PC系统为win10,在使用过程中,曾遇到提示说 “你的电脑上的应用需要使用以下Windows功能:.NET Framework 3.5(包括.NET 2.0和3.0)”。如图:因此,我在网上找了一下如何才能安装成功的方法。方法有,但可能有的会适用,有的却不一定成功。所以在这里稍微记录一下:大部分内容是转载自:https://www.windows10.pro/win10-_.net framework 3.5离线安装包

c语言程序总是从main函数开始执行,c语言程序总是从main函数开始执行吗?-程序员宅基地

文章浏览阅读7.1k次,点赞3次,收藏10次。是的,一个C程序总是从main函数开始执行,而不论其在程序中的位置。在main函数中可以调用程序中的其他函数,而其他函数却不可以调用main函数;程序最后再从main函数中结束。本教程操作环境:windows7系统、c99版本、Dell G3电脑。C程序的执行总是从main函数开始,在main函数结束。main函数,又称主函数,是程序执行的起点,main是相对来说的,如同音学理论之主调于泛音,泛音...

随便推点

BZOJ 3728: PA2014Final Zarowki|贪心-程序员宅基地

文章浏览阅读726次。因为要求总功率最小,所以按功率从小到大枚举已有的灯泡,尽量使用先使用小的,然后贪心选取第一个小于等于这个功率的房间,让后将差值放入堆中,用来最后更新答案,如果到最后时仍然有>=k>=k的数量的灯泡没用则无解,否则就有解 都说用STL来水题..怎么感觉题并不水..#include#include#include#include_bzoj 3728

gstat | 空间插值(二)——克里金插值之普通克里金-程序员宅基地

文章浏览阅读6.7k次,点赞6次,收藏62次。说明:昨天的推文误把可吸入颗粒物当作PM2.5,实应该为PM10,这里修正后重发。从本篇开始计划分三篇介绍克里金插值。与反距离权重插值不同,克里金插值是无偏估计,其中也涉及到模型估计。本篇...

数据结构个人简易总结(DFS BFS WPL 最小生成树 哈夫曼编码 有向图 无向图 二叉树 稀疏矩阵 KMP匹配算法 栈和队列 链表)_dswpl-程序员宅基地

文章浏览阅读703次,点赞2次,收藏10次。仅供学习参考,有一些属于模板类算法需要记住,有一些设计应用需要了解大致思路希望通过这篇文章,读者能了解数据结构大致要学习哪些内容,以便复习参考。整理作者:黎爬爬(2745907300)_dswpl

pull解析器的简单示例_android pull 解析服务器示例-程序员宅基地

文章浏览阅读1.6k次。对xml的解析,我们在将j2ee中,常使用的解析器是DOM和SAX。而在android中,我们还可以使用PULL解析器。pull是android中内置的解析器,不需要导入jar包,就可以直接的使用相关的类来解析大部分的xml文件了。pull也是采用事件驱动模型,跟SAX解析XML文件差不多。xml文件:XY122XY222 这个xml文件为了获取流的方便,我_android pull 解析服务器示例

终止线程的三种方法_终止正在进行的线程任务-程序员宅基地

文章浏览阅读2.2k次。有三种方法可以使终止线程。1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。2. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。3. 使用interrupt方法中断线程。1. 使用退出标志终止线程当run方法执行完后,线程就会退出。但有时run方法是永远不会结束的。如在服务端程序中使用线程进行监_终止正在进行的线程任务

STM32F10X新建工程步骤_菲斯塔固件-程序员宅基地

文章浏览阅读473次,点赞2次,收藏5次。STM32创建新工程第一步下载固件包第二步创建工程第三步完成配置,修改main文件为空执行编译第一步下载固件包网址如下:1、Openedv:http://openedv.com/posts/list/6054.htm2、ST官网:https://www.stmcu.com.cn/Designresource/list/STM32F1/firmware_software/firmware_software固件库介绍:Libraries:CMSIS、STM32F10x_StdPeriph_Driv_菲斯塔固件

推荐文章

热门文章

相关标签