随机生成上传图片的唯一id

randomly generate the unique id for the uploaded uploaded images

本文关键字:唯一 id 随机      更新时间:2023-09-26

我想为上传的图片和它们的文件名生成随机id。

我的代码是

var getUniqueMacroName = function(filename){
    var Name = $.trim(filename.replace(/.[^.]+$/,'').replace(/ /g, "").replace(/[^'w]|_/g, "").toUpperCase());
    var Ext = $.trim(filename.replace(/^.*'./,'').toUpperCase());
    var mac= _.map($("#data").DataTable().data(), function(a){return a[0]});
    var fileRand = Name.substring(0, (10 - fileExt.length));
    while(_.contains(mac, ("GM" + fileRand + fileExt))){
        var rand = Math.min(Math.floor((Math.random() * fileRand.length) + 5), (fileRand.length - 1));
        fileRand =  (fileRand.substring(0, rand) + rand + fileRand.substring(rand, fileRand.length)).substring(0, (10 - Ext.length));
    }
    return "GM" + fileRand + Ext;
}

如果我上传像

这样的图片
  1. 图库图像320 .jpg

  2. 图库图像320 .jpg

  3. 图库图像320 .jpg

  4. 图库图像320 4.jpg

  5. 图库图像320 .jpg

  6. 图库图像320 .jpg

第六张图像在while条件下执行无限次。这将发生当上传的图像名称有几乎相同。因此浏览器将不响应。

在javascript或jquery中是否有任何方法可以为任何类型的文件名(包括相同的文件名)生成唯一的id ?

由用户建议编辑有用的答案;

是的,你可以使用TimeStamp作为唯一的ID与Date.now();它生成毫秒,它们总是唯一的;

now()方法返回从UTC时间1970年1月1日00:00:00到现在所经过的毫秒数。

var getUniqueMacroName = function(filename){
    var Name = $.trim(filename.replace(/.[^.]+$/,'').replace(/ /g, "").replace(/[^'w]|_/g, "").toUpperCase());
    var Ext = $.trim(filename.replace(/^.*'./,'').toUpperCase());
    var mac= _.map($("#data").DataTable().data(), function(a){return a[0]});
    // dont need anymore control unique
    var fileRand = Date.getTime();
    fileRand = fileRand.substr(fileRand.length - 10);
    return "GM" + fileRand + Ext;
}

你的方法可以工作,如果你产生一个更长的'随机'数?

var random = Math.random()*100000000000000000;  // e.g. 6137274974025786