#uuid #guid #hash #namespaces #rfc4122

uuid-by-string

从字符串生成 uuid-hash

8 个稳定版本

3.0.1 2024年7月27日
2.0.5 2024年7月26日
2.0.3 2023年11月21日
1.0.0 2023年11月20日

7#namespaces

Download history 17/week @ 2024-04-20 4/week @ 2024-04-27 2/week @ 2024-05-04 38/week @ 2024-05-11 4/week @ 2024-05-18 2/week @ 2024-06-01 5/week @ 2024-06-08 6/week @ 2024-06-15 9/week @ 2024-06-22 2/week @ 2024-06-29 26/week @ 2024-07-06 17/week @ 2024-07-13 75/week @ 2024-07-20 315/week @ 2024-07-27 10/week @ 2024-08-03

每月下载量 419

MIT 许可证

19KB
115

uuid-by-string Crates.io 下载

生成基于 RFC-4122 的基于名称的 UUID。支持带有和不带有(非标准,见下文)名称空间的 3 和 5 版本 UUID。

🚨 警告:除非明确需要,否则不要使用(见 替代方案) 🚨

注意:在没有名称空间的情况下生成 UUID v3 和 v5 是 非标准 的(RFC-4122 仅涵盖将名称空间与名称连接的情况,因此如果您希望在其他编程语言中获取可重复的结果,您需要生成带有某些名称空间的 UUID,例如 nil

根据实现差异,无法使用标准生成方法复制无名称空间 UUID 生成的结果,请记住这一点。

此库是从 Danakt Saushkin 的同名 JavaScript 库 重写的。所有功能和测试都已到位。

安装

cargo add uuid-by-string

使用方法

use uuid_by_string::uuid;
uuid::generate("hello world", Some("d3486ae9-136e-5856-bc42-212385ea7970")).unwrap()
//"1825ed38-348f-5b46-99de-fd84b83aba5e"

// You can skip UUID and the nil UUID will be used as default
uuid::generate("hello world", None).unwrap()
//"191333f6-c83e-5b3b-bdb0-bd483ad1bcb7"

use uuid_by_string::uuid_no_namespace;
// Note: generating UUID v3 and v5 without namespace is non-standard
uuid_no_namespace::generate("hello world")
//"2aae6c35-c94f-5fb4-95db-e95f408b9ce9";

字符串 hello world 将始终返回 2aae6c35-c94f-5fb4-95db-e95f408b9ce9

您可以指定 UUID 版本。根据 RFC-4122,可用的版本是 3 和 5。版本负责散列算法:版本 3 使用 MD5,版本 5 使用 SHA-1。默认情况下,如果未指定版本,则使用 UUIDv5。

use uuid_by_string::uuid;
use uuid_by_string::uuid_no_namespace;

fn main() {
    assert_eq!(uuid::generate_v3("hello world", Some("d3486ae9-136e-5856-bc42-212385ea7970")), Ok("c8aeb76a-1204-3f07-995e-5c5fa3494b7f".to_owned()));
    assert_eq!(uuid::generate_v3("hello world", Some("D3486AE9-136e-5856-bc42-212385ea7970")), Ok("c8aeb76a-1204-3f07-995e-5c5fa3494b7f".to_owned()));
    assert_eq!(uuid::generate_v5("hello world", Some("d3486ae9-136e-5856-bc42-212385ea7970")), Ok("1825ed38-348f-5b46-99de-fd84b83aba5e".to_owned()));
    assert_eq!(uuid::generate_v5("hello world", Some("D3486AE9-136e-5856-bc42-212385ea7970")), Ok("1825ed38-348f-5b46-99de-fd84b83aba5e".to_owned()));

    // Note: generating UUID v3 and v5 without namespace is non-standard
    assert_eq!(uuid_no_namespace::generate_v3("hello world"), "5eb63bbb-e01e-3ed0-93cb-22bb8f5acdc3");
    assert_eq!(uuid_no_namespace::generate_v5("hello world"), "2aae6c35-c94f-5fb4-95db-e95f408b9ce9");
}

替代方案

您可以将此库替换为 https://docs.rs/uuid/。代码如下所示

use uuid::Uuid;

let uuid = Uuid::new_v3(&Uuid::nil(), b"Hello world!");
let uuid = Uuid::new_v5(&Uuid::nil(), b"Hello world!");

有关替代方案的更多信息

依赖项

~2.5–3.5MB
~63K SLoC