Unique 如何在Dart中生成唯一id

Unique 如何在Dart中生成唯一id,unique,dart,identity,uuid,uniqueidentifier,Unique,Dart,Identity,Uuid,Uniqueidentifier,我写websocket聊天。 如何为用户生成唯一的id 现在我使用以下代码: id=new DateTime.now().millissecondssinceepoch; 还有更简洁的解决方案吗?1.有一个UUID发布包: 用法示例: import 'package:uuid/uuid.dart'; // Create uuid object var uuid = Uuid(); // Generate a v1 (time-based) id uuid.v1(); // -> '

我写websocket聊天。 如何为用户生成唯一的id

现在我使用以下代码:

id=new DateTime.now().millissecondssinceepoch;

还有更简洁的解决方案吗?

1.有一个UUID发布包:

用法示例:

import 'package:uuid/uuid.dart';

// Create uuid object
var uuid = Uuid();

// Generate a v1 (time-based) id
uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'

// Generate a v4 (random) id
uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'

// Generate a v5 (namespace-name-sha1-based) id
uuid.v5(uuid.NAMESPACE_URL, 'www.google.com'); // -> 'c74a196f-f19d-5ea9-bffd-a2742432fc9c'
2.此src有一个dart GUID生成器

我不会在这里直接发布函数src,因为它没有明显的许可证,但示例用法如下:

final String uuid = GUIDGen.generate();

在2020年,你可以做
UniqueKey()这是一个内置类:


< p>如果你喜欢MangGDB风格的ID,你可以考虑这个小的包,这将有助于创建对象id:


除了从uuid,您还可以尝试此方法来生成小的唯一密钥:

他们甚至有一个碰撞计算器:


请注意:这不依赖强随机数据。因此,生成的UUID不应被视为加密性强。不管它是否重要,我将留给读者来决定。谢谢,我知道,我将对现有的列表进行额外检查uuids@KaiSellgren这是一篇很老的帖子,但我想我可以通过在这里提问来丰富它。你说“这不依赖于强随机数据”。你能详细说明一下吗?我的意思是,我们怎样才能使它更强大?@Felipe该库现在似乎有了一个随机数据生成的替代函数:--我没有验证或测试它的强大程度,但你可以通过计算卡方分布来做这件事。如果你好奇的话,我的Github页面有一个确定随机数据强度的项目。我如何多次使用uuid?我需要在定义最终字符串image_name=Uuid().v1()的两个不同字段中解析它;但是每次我得到不同的结果。我认为这个类的预期用途是用于小部件,而不是用作db中的ID。@Gino所以这个类作为唯一ID不安全?为什么?@Rutrus如果你看一看这个类,你会清楚地看到它创建了一个只在应用程序内部唯一的密钥。这意味着,如果您将密钥保存在应用程序外部(如数据库中),您可能会在以后重新创建相同的唯一密钥。从第83排到第103排,如果你想看一下的话,还有一个讨论,谢谢你,基诺,但是16^5对我来说是足够随机的。这个UnikeKey()适用于我的实用程序。当然,它在加密方面并不安全,但它是一种快速的内置方法。@Rufus它还不是关于加密的。如果它适用于您的实用程序,那么您应该使用它。就像他们说的“如果它起作用,就不要碰它!”
import 'package:bson_objectid/bson_objectid.dart';

main() {
  ObjectId id1 = new ObjectId();
  print(id1.toHexString());

  ObjectId id2 = new ObjectId.fromHexString('54495ad94c934721ede76d90');
  print(id2.timestamp);
  print(id2.machineId);
  print(id2.processId);
  print(id2.counter);
}