在javascript / jquery中的uniqid()?

问题描述 投票:7回答:8

什么是javascript中此函数的等价物:

http://php.net/manual/en/function.uniqid.php

基本上我需要生成一个看起来像:a4245f54345的随机ID,并以字母字符开头(所以我可以将它用作CSS id)

javascript jquery uniqueidentifier phpjs
8个回答
8
投票

试试这个(在php中工作)。

$prefix = chr(rand(97,121));  
$uniqid =  $prefix.uniqid(); // $uniqid = uniqid($prefix);

试试这个JavaScript ::

var n = Math.floor(Math.random() * 11);
var k = Math.floor(Math.random() * 1000000);
var m = String.fromCharCode(n) + k;

12
投票

试试PHPJS的网站,特别是uniqid的页面


6
投票

I have been using this ...

我完全按照我的方式使用它,如果它在PHP的地方。两者都返回相同的结果。

function uniqid(a = "",b = false){
    var c = Date.now()/1000;
    var d = c.toString(16).split(".").join("");
    while(d.length < 14){
        d += "0";
    }
    var e = "";
    if(b){
        e = ".";
        var f = Math.round(Math.random()*100000000);
        e += f;
    }
    return a + d + e;
}

4
投票

这里的所有答案(除了phpjs)都不会生成唯一ID,因为它基于随机。随机并不是唯一的!

简单的解决方案:

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_id_counter更改为存储每个前缀的计数器的数组。


2
投票
<html>
<head>
<script type="text/javascript">
function generateSerial(len) {
    var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
    var string_length = 10;
    var randomstring = '';

    for (var x=0;x<string_length;x++) {

        var letterOrNumber = Math.floor(Math.random() * 2);
        if (letterOrNumber == 0) {
            var newNum = Math.floor(Math.random() * 9);
            randomstring += newNum;
        } else {
            var rnum = Math.floor(Math.random() * chars.length);
            randomstring += chars.substring(rnum,rnum+1);
        }

    }
    alert(randomstring);
}
generateSerial(8);
</script>
</head>
<body>

</body>
</html>

这有点令人费解,但你明白了我的要点! 示例:http://jsfiddle.net/Ng4tB/


2
投票

真正的问题是,您是否需要UUID符合RFC 4122标准?你的问题似乎暗示你没有,所以创建一个仅基于Math.random()的函数来生成这样的ID并不太难。此外,它将比phpJS实现快得多。


1
投票

Underscore.js有一个uniqueid()方法 https://underscorejs.org/#uniqueId

_.uniqueId([prefix]) 为需要一个的客户端模型或DOM元素生成全局唯一的id。如果传递了prefix,则id将附加到它。

_.uniqueId('contact_');  
=> 'contact_104'

0
投票
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;
}

它是以与PHP uniqId()相同的原理生成的 - 具体编码时间,以微秒为单位。


0
投票

发现这个:

https://github.com/makeable/uuid-v4.js/blob/master/uuid-v4.js

并略微修改为:

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;
}

效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.