javascript/jquery中的uniqid()?
这个函数在javascript中的等价物是什么:javascript/jquery中的uniqid()?,javascript,jquery,uniqueidentifier,phpjs,Javascript,Jquery,Uniqueidentifier,Phpjs,这个函数在javascript中的等价物是什么: 基本上,我需要生成一个随机ID,看起来像:a4245f54345并以字母字符开头(因此我可以将其用作CSS ID)真正的问题是,您是否需要UUID符合RFC 4122?您的问题似乎表明您不需要这样做,因此创建一个基于Math.random()的函数来生成这样的ID并不难。另外,它将比phpJS实现快得多。试试这个(在php中工作) 在JavaScript中尝试以下操作: var n = Math.floor(Math.random() * 11
基本上,我需要生成一个随机ID,看起来像:
a4245f54345
并以字母字符开头(因此我可以将其用作CSS ID)真正的问题是,您是否需要UUID符合RFC 4122?您的问题似乎表明您不需要这样做,因此创建一个基于Math.random()的函数来生成这样的ID并不难。另外,它将比phpJS实现快得多。试试这个(在php中工作)
在JavaScript中尝试以下操作:
var n = Math.floor(Math.random() * 11);
var k = Math.floor(Math.random() * 1000000);
var m = String.fromCharCode(n) + k;
函数生成器序列(len){
var chars=“0123456789abcdefghijklmnopqrstuvwxtzabcdfghiklmnopqrstuvwxyz”;
变量字符串长度=10;
var randomstring='';
对于(var x=0;x这里的所有答案(phpjs除外)都不会生成唯一的ID,因为它是基于random的。random不是唯一的
一个简单的解决方案:
window.unique_id_counter = 0 ;
var uniqid = function(){
var id ;
while(true){
window.unique_id_counter++ ;
id = 'uids_myproject_' + window.unique_id_counter ;
if(!document.getElementById(id)){
/*you can remove the loop and getElementById check if you
are sure that noone use your prefix and ids with this
prefix are only generated with this function.*/
return id ;
}
}
}
如果需要,可以很容易地添加动态前缀。只需将unique\u id\u counter
更改为存储每个前缀计数器的数组。我一直在使用这个。。。
我使用它就像使用PHP一样。两者都返回相同的结果
函数uniqid(前缀=”,random=false){
const sec=Date.now()*1000+Math.random()*1000;
常数id=第toString(16)节。替换(/\./g,“”)。焊盘端(14,“0”);
返回`${prefix}${id}${random?`.${Math.trunc(Math.random()*100000000)}`:“}”;
};
函数uniqId(前缀){
if(窗口性能){
var s=performance.timening.navigationStart;
var n=performance.now();
var base=数学楼层((s+数学楼层(n))/1000);
}否则{
var n=new Date().getTime();
var基准=数学楼层(n/1000);
}
var ext=数学楼层(n%1000*1000);
var now=(“00000000”+base.toString(16)).slice(-8)+(“000000”+ext.toString(16)).slice(-5);
如果(现在underline.js有一个uniqueid()
方法
唯一ID([前缀])
为需要全局唯一id的客户端模型或DOM元素生成一个全局唯一id。如果传递了前缀,则该id将附加到它
_.uniqueId('contact_');
=> 'contact_104'
我们发现:
并对此稍作修改:
function uniqid(length){
var dec2hex = [];
for (var i=0; i<=15; i++) {
dec2hex[i] = i.toString(16);
}
var uuid = '';
for (var i=1; i<=36; i++) {
if (i===9 || i===14 || i===19 || i===24) {
uuid += '-';
} else if (i===15) {
uuid += 4;
} else if (i===20) {
uuid += dec2hex[(Math.random()*4|0 + 8)];
} else {
uuid += dec2hex[(Math.random()*16|0)];
}
}
if(length) uuid = uuid.substring(0,length);
return uuid;
}
函数uniqid(长度){
变量dec2hex=[];
对于(var i=0;我不打算将其作为副本关闭,因为php的uniqid
似乎不会创建GUID(尽管这是您所期望的),但也许您仍然可以在这里找到一些帮助:您需要随机的,还是可以简单地使用顺序计数器?即“a1”、“a2”等。问题是需要一个JavaScript函数。此Java脚本代码不具有准确性(不确定是否总是按字母顺序排列)。但您可以根据自己的要求对代码进行一些更改。这不是唯一的,因此不等同于php uniqid函数,但什么是RFC 4122兼容的?@DylannCordel:Fair point,但这里建议的任何其他策略都不是。phpuniqid()
方法本质上等同于microtime()
,任何在浏览器或(负载平衡、多实例)web服务器上运行的纯算法uuid生成器都有可能发生冲突——除非服务器使用名称空间(显然不是询问者的意图)或者根据集中式guid服务进行验证。他的1字母+10字母数字方案产生95五百万的空间或大约56位的熵。我不会太担心冲突。完美的解决方案,正如OP所要求的。这应该是公认的答案。参数a和b是什么?参数a
是前缀和参数b
将在末尾添加一个随机数以避免冲突。谢谢!我编写了一个测试,将Javascript函数与PHP uniqid()的输出进行比较。我发现您的答案更准确。
function uniqId(prefix) {
if (window.performance) {
var s = performance.timing.navigationStart;
var n = performance.now();
var base = Math.floor((s + Math.floor(n))/1000);
} else {
var n = new Date().getTime();
var base = Math.floor(n/1000);
}
var ext = Math.floor(n%1000*1000);
var now = ("00000000"+base.toString(16)).slice(-8)+("000000"+ext.toString(16)).slice(-5);
if (now <= window.my_las_uid) {
now = (parseInt(window.my_las_uid?window.my_las_uid:now, 16)+1).toString(16);
}
window.my_las_uid = now;
return (prefix?prefix:'')+now;
}
_.uniqueId('contact_');
=> 'contact_104'
function uniqid(length){
var dec2hex = [];
for (var i=0; i<=15; i++) {
dec2hex[i] = i.toString(16);
}
var uuid = '';
for (var i=1; i<=36; i++) {
if (i===9 || i===14 || i===19 || i===24) {
uuid += '-';
} else if (i===15) {
uuid += 4;
} else if (i===20) {
uuid += dec2hex[(Math.random()*4|0 + 8)];
} else {
uuid += dec2hex[(Math.random()*16|0)];
}
}
if(length) uuid = uuid.substring(0,length);
return uuid;
}