纯 JavaScript 生成UUID和随机MD5值


字数:927 阅读时长:3分钟 阅读:85

在开发中,我们经常需要生成唯一的标识符或随机的哈希值。在这篇博客中,我将介绍如何使用纯 JavaScript 生成 UUID(通用唯一标识符)和随机 MD5 值的方法。这些方法适用于前端和后端开发,让我们一起深入浅出地了解吧。

UUID & MD5

前言

UUID:(通用唯一标识符),它是一个标准化的字符串标识符,长度为 36 个字符,包括 32 个十六进制数字和 4 个连字符(例如:550e8400-e29b-41d4-a716-446655440000)。请注意,UUID 并不是通过哈希算法生成的,而是根据特定的算法和规则生成的唯一标识符。

MD5、SHA-1、SHA-256、SHA-384 和 SHA-512 是常见的哈希算法,它们生成的哈希值长度如下:

哈希算法长度字节长度字符串长度(十六进制字符)
MD5128 位16 字节32 个
SHA-1160 位20 字节40 个
SHA-256256 位32 字节64 个
SHA-384384 位48 字节96 个
SHA-512512 位64 字节128 个

在实际开发中,我们通常使用 MD5 算法生成哈希值,因为它的长度适中,而且速度快,安全性也足够高。

在线体验:https://next-blog.tiven.cn/tools

一、生成UUID

UUID是一种唯一标识符,通常用于标识信息或对象。

  1. 使用纯JavaScript生成UUID的方法:
1
2
3
4
5
6
7
8
9
10
11
function genUUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = (Math.random() * 16) | 0,
v = c === 'x' ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
}

// 示例用法
const uuid = genUUID();
console.log(uuid);

这个函数使用了UUID的标准格式,并通过替换操作生成了一个随机的UUID。你可以在项目中直接使用这个函数,确保生成的UUID是唯一的。

  1. 使用最新浏览器内置的crypto API生成UUID,这个方法更简单更高效,方法如下:
1
2
3
const genUUID = () => {
return crypto.randomUUID()
}
  1. 如果长度没有限制,我们可以使用Math.random()方法生成一个随机的字符串,方法如下:
1
2
3
const genUUID = () => {
return Math.random().toString(36).substring(2)
}

二、生成随机MD5值

MD5 是一种常用的哈希算法,我们可以使用它来生成唯一的散列值。

我们可以使用浏览器内置的crypto API生成随机MD5值,方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const md5 = async (str) => {
const msgUint8 = new TextEncoder().encode(str) // 编码为(utf-8)Uint8Array
const hashBuffer = await crypto.subtle.digest('SHA-1', msgUint8) // 计算消息的哈希值
const hashArray = Array.from(new Uint8Array(hashBuffer)) // 将缓冲区转换为字节数组
const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('') // 将字节数组转换为十六进制字符串
return hashHex
}

const generateRandomMD5 = async () => {
return await md5(Math.random().toString(36))
}

// 示例用法
const randomMD5 = generateRandomMD5();
console.log(randomMD5); // f185173fa08df8360d12cbcd795c7cf59240996b
console.log(randomMD5.length); // 40

这样生成的随机字符串长度为 40,如果想要和真正的MD5值一样长度为 32,可以使用 slice 方法截取前 32位,方法如下:

1
2
3
4
5
6
7
const md5 = async (str) => {
const msgUint8 = new TextEncoder().encode(str) // 编码为(utf-8)Uint8Array
const hashBuffer = await crypto.subtle.digest('SHA-1', msgUint8) // 计算消息的哈希值
const hashArray = Array.from(new Uint8Array(hashBuffer)) // 将缓冲区转换为字节数组
const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('') // 将字节数组转换为十六进制字符串
return hashHex.slice(0, 32) // 截取前32位
}

这两个方法可以方便地在你的项目中生成UUID和随机MD5值。记得根据项目需求选择合适的方法,确保生成的值足够唯一和安全。

参考文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Crypto


欢迎访问:天问博客

本文作者: Tiven
发布时间: 2023-12-26
最后更新: 2024-01-22
本文标题: 纯 JavaScript 生成UUID和随机MD5值
本文链接: https://www.tiven.cn/p/bae1a0ee/
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
欢迎留言,提问 ^_^
个人邮箱: tw.email@qq.com
notification icon
博客有更新,将会发送通知给您!