Làm cách nào để tạo một số thập lục phân ngẫu nhiên với độ dài mà tôi chọn bằng C#?Số thập lục phân được tạo ngẫu nhiên trong C#
Trả lời
static Random random = new Random();
public static string GetRandomHexNumber(int digits)
{
byte[] buffer = new byte[digits/2];
random.NextBytes(buffer);
string result = String.Concat(buffer.Select(x => x.ToString("X2")).ToArray());
if (digits % 2 == 0)
return result;
return result + random.Next(16).ToString("X");
}
Random random = new Random();
int num = random.Next();
string hexString = num.ToString("X");
random.Next() lấy đối số cho phép bạn chỉ định một phút và một giá trị tối đa, vì vậy đó là cách bạn sẽ kiểm soát độ dài.
Tùy thuộc vào ngẫu nhiên bạn muốn, nhưng dưới đây là 3 lựa chọn thay thế: 1) Tôi thường chỉ sử dụng Guid.NewGuid và chọn một phần của nó (dep. Về số lượng lớn tôi muốn).
2) System.Random (xem trả lời khác) là tốt nếu bạn chỉ muốn 'ngẫu nhiên đủ'.
3) System.Security.Cryptography.RNGCryptoServiceProvider
Cắt lên một GUID có vẻ giống như một ý tưởng tồi tệ với tôi. Họ chỉ duy nhất được thực hiện như một toàn thể. Nhiều bit của GUID chắc chắn không đủ điều kiện là ngẫu nhiên. – spender
@spender là chính xác, ví dụ nhiều GUID chứa địa chỉ MAC của PC tạo ra chúng. –
Eh, không, các địa chỉ mac dựa trên địa chỉ đã được gỡ bỏ trở lại vào năm 2000-ish khi chúng được coi là một vấn đề an ninh tiềm năng. GUID được tạo ra bởi một bộ tạo số ngẫu nhiên (122 bit ngẫu nhiên, 6 bit không ngẫu nhiên). Dù bằng cách nào, sử dụng một lát bit 32 (hoặc nhiều hơn) của một guid cho một số ngẫu nhiên hơn System.Random. Tức là - trừ khi bạn gọi UuidCreateSequential đã được thêm vào để tương thích ngược trong trường hợp bất kỳ ai muốn có phong cách cũ, nhưng đó là một câu chuyện khác. – KristoferA
Dưới đây là một trong đó sẽ trả về một chuỗi hex 256-bit (8x8 = 256):
private static string RandomHexString()
{
// 64 character precision or 256-bits
Random rdm = new Random();
string hexValue = string.Empty;
int num;
for (int i = 0; i < 8; i++)
{
num = rdm.Next(0, int.MaxValue);
hexValue += num.ToString("X8");
}
return hexValue;
}
Nó sẽ chỉ làm việc nếu 'chiều dài <= 8' là 'int.MaxValue' phù hợp với 8 chữ số thập phân. –
Nếu anh ta thực sự không muốn chuỗi hex có độ dài của sự lựa chọn của mình, bạn sẽ cần mã để tính số lượng tối thiểu với chiều dài hex 'x' và tối đa với độ dài 'x'. – colithium
Đúng. Tôi đã bỏ qua mục đích đó, nhưng về cơ bản bạn chỉ cần thực hiện chuyển đổi trên 0xF? ('scuse biểu thức chính quy của tôi) để tìm bất kỳ số nguyên nào phù hợp với độ dài mong muốn của bạn. – womp