javascript中该函数的等价物是什么:
http://php.net/manual/en/function.uniqid.php
基本上我需要生成一个看起来像a4245f54345
的随机ID,并以字母字符开头(所以我可以将它用作CSS id)
答案 0 :(得分:12)
尝试PHPJS的网站,特别是uniqid
的页面答案 1 :(得分: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;
答案 2 :(得分: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
更改为存储每个前缀的计数器的数组。
答案 3 :(得分:4)
我完全按照我的方式使用它,如果它在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 :(得分:2)
真正的问题是,您是否需要UUID符合RFC 4122标准?你的问题似乎暗示你没有,所以创建一个仅基于Math.random()的函数来生成这样的ID并不太难。此外,它将比phpJS实现快得多。
答案 5 :(得分: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/
答案 6 :(得分: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()相同的原理上生成的-专门以毫秒为单位的编码时间。
答案 7 :(得分:0)
Underscore.js具有uniqueid()
方法
https://underscorejs.org/#uniqueId
_.uniqueId([prefix])
为需要一个的客户端模型或DOM元素生成一个全局唯一的ID。如果传递了前缀,则将id附加到它后面。_.uniqueId('contact_'); => 'contact_104'
答案 8 :(得分: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;
}
效果很好。