9

javascriptのこの関数に相当するものは何ですか?

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

基本的に、次のようなランダムIDを生成する必要があります。a4245f54345アルファベット文字で始まります(CSS IDとして使用できます)。

4

8 に答える 8

23

私はこれを使っています...

PHPの場合とまったく同じように使用します。どちらも同じ結果を返します。

function uniqid(prefix = "", random = false) {
    const sec = Date.now() * 1000 + Math.random() * 1000;
    const id = sec.toString(16).replace(/\./g, "").padEnd(14, "0");
    return `${prefix}${id}${random ? `.${Math.trunc(Math.random() * 100000000)}`:""}`;
};
于 2018-02-03T02:49:07.803 に答える
10

これを試してください(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;
于 2011-02-02T09:03:50.937 に答える
5

ここでのすべての回答(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各プレフィックスのカウンターを格納する配列に変更するだけです。

于 2015-05-13T12:56:22.670 に答える
2

本当の問題は、UUIDがRFC4122に準拠している必要があるかどうかです。あなたの質問はあなたがそうしないことを示唆しているように思われるので、そのようなIDを生成するためにMath.random()に基づいて関数を作成することはそれほど難しくありません。さらに、phpJSの実装よりもはるかに高速になります。

于 2011-02-02T09:00:15.620 に答える
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/

于 2011-02-02T09:55:28.817 に答える
1
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()と「同じ」原則で生成されます。具体的にはマイクロ秒単位でエンコードされた時間です。

于 2018-12-28T10:20:01.773 に答える
1

Underscore.jsにはuniqueid()メソッド
https://underscorejs.org/#uniqueIdがあります

_.uniqueId([prefix])
クライアント側モデルまたはそれを必要とするDOM要素のグローバルに一意のIDを生成します。プレフィックスが渡されると、IDがプレフィックスに追加されます。

_.uniqueId('contact_');  
=> 'contact_104'
于 2019-04-04T18:06:21.947 に答える
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;
}

よく働く。

于 2019-07-05T16:14:25.613 に答える