2012-10-16 58 views
7

Sử dụng Khuôn khổ .NET, có cách nào để tạo một GUID ngẫu nhiên trong C# trong một khoảng thời gian xác định không? Ví dụ, tôi cần một GUID ngẫu nhiên lớn hơn ffffffff-ffff-ffff-ffff-1fffffffffffff và nhỏ hơn ffffffff-ffff-ffff-ffff-2fffffffffffff.Tạo một GUID ngẫu nhiên trong C# trong một khoảng thời gian cụ thể

+0

Điều gì sẽ xảy ra nếu bạn cần tạo nhiều GUID hơn trong phạm vi? Ví dụ: Thuật toán của bạn được gọi là 20 lần cho phạm vi ffffffff-ffff-ffff-ffff-fffffffffffff0 đến ffffffff-ffff-ffff-ffff-ffffffffffffff? –

+2

Đó không phải là cách chúng hoạt động, nói chung. Có một số yếu tố không ngẫu nhiên với nó, nhưng vì lý do phiên bản và như vậy, bạn không thể chỉ (với GUIDs ngẫu nhiên) tạo ra một trong một phạm vi cụ thể. Nếu không, họ sẽ không làm việc như họ làm. – ssube

Trả lời

7

Sử dụng this overload:

[CLSCompliantAttribute(false)] 
public Guid(
    uint a, 
    ushort b, 
    ushort c, 
    byte d, 
    byte e, 
    byte f, 
    byte g, 
    byte h, 
    byte i, 
    byte j, 
    byte k 
) 

Guid(0xa,0xb,0xc,0,1,2,3,4,5,6,7) tạo ra một Guid tương ứng với:

0000000a-000b-000c-0001-020304050607 

Bạn có thể ngẫu nhiên các thông số bất kỳ cách nào bạn muốn. Ví dụ: bạn có thể làm:

var r[] = new byte[] { 1,2,3,4 } // chosen by fair dice rolls 
           // guaranteed to be random 

var guid = new GUID(0xFFFFFFFF, 0xFFFF, 0xFFFF, 0xFFFF, r[1], r[2], r[3], r[4]... 

Vâng, bạn có ý tưởng. Bạn phải làm một số bit twiddling để có được tham số thứ năm bên phải.

+3

Mặc dù điều này có thể nói rõ ràng, chỉ vì nó là một 'Guid' không có nghĩa đó là một GUID. Đó là, nó thuộc vào bạn để đảm bảo thuật toán của bạn đảm bảo tính duy nhất toàn cầu. Nếu không nó chỉ là một 'Id'. –

Các vấn đề liên quan