Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript/jquery中的uniqid()?_Javascript_Jquery_Uniqueidentifier_Phpjs - Fatal编程技术网

javascript/jquery中的uniqid()?

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

这个函数在javascript中的等价物是什么:


基本上,我需要生成一个随机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,但这里建议的任何其他策略都不是。php
uniqid()
方法本质上等同于
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;
}