为了我的 JavaScript 网站应用程序,我想生成短的 GUID(用于不同类型的对象 - 字符串和字符串数组)
我希望我的 UID(GUID)类似于 "aX4j9Z"。
所以这些 UID 应该足够轻量级,以便进行 Web 传输和 JS 字符串处理,并且对于结构不是非常庞大的情况下(不超过10k个元素),具有相当的唯一性。我的意思是,在生成 UID 后,我可以检查此 UID 是否已存在于结构中,并在需要时重新生成它。
为了我的 JavaScript 网站应用程序,我想生成短的 GUID(用于不同类型的对象 - 字符串和字符串数组)
我希望我的 UID(GUID)类似于 "aX4j9Z"。
所以这些 UID 应该足够轻量级,以便进行 Web 传输和 JS 字符串处理,并且对于结构不是非常庞大的情况下(不超过10k个元素),具有相当的唯一性。我的意思是,在生成 UID 后,我可以检查此 UID 是否已存在于结构中,并在需要时重新生成它。
随机生成一些字符串:
function getUID(len){
var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
out = '';
for(var i=0, clen=chars.length; i<len; i++){
out += chars.substr(0|Math.random() * clen, 1);
}
// ensure that the uid is unique for this page
return getUID.uids[out] ? getUID(len) : (getUID.uids[out] = out);
}
getUID.uids = {};
const idChars: string = 'ABCDEFGHJKMNPQRSTUVWXYZ'
export function generateId(): string {
const now: Date = new Date()
let id = now.getUTCFullYear().toString()
id += now.getUTCMonth().toString().padStart(2, '0')
id += now.getUTCDay().toString().padStart(2, '0')
for (let i = 0; i < 6; i++) id += idChars[Math.floor(Math.random() * idChars.length)]
return id
}
它生成像20230506VJDMQD
这样的ID。
日期前缀在确保唯一性方面非常有帮助,特别是在长时间内创建数千条数据库记录时。对于客户编号或发票编号等事项,日期部分提供了额外的信息,而不仅仅是唯一性。
您可以很容易地根据自己喜好调整字符集,并且如果您不想要日期前缀,也可以轻松从代码中删除该部分。
如果您每天需要生成数百万个ID,那么您可以将循环次数从6增加到更大的数字,但在某个点上,您可能会选择使用UUID。
如果您真的只想要6个字符,那么JavaScript中的简化版本如下:
const idChars = 'ABCDEFGHJKMNPQRSTUVWXYZ'
function generateId() {
let id = ''
for (let i = 0; i < 6; i++) id += idChars[Math.floor(Math.random() * idChars.length)]
return id
}
您可以使用md5算法生成随机字符串。md5是Node.js的一个包。
var randomChars = Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);
var shortUrl = md5(originalUrl + randomChars + new Date()).substring(0, 5).toString();
console.log(shortUrl);
这将每次生成唯一的字符串。