有人可以指出生成報告或文檔ID的首選方法嗎?我一直在尋找可能使用的guid,將其縮小到更短的長度。我們有一個應用程序爲大約8個字符的報告創建一個ID。他們似乎使用某種類型的散列碼。可能使用基本的36編碼方案。但是我似乎找不到一種方法讓散列碼長達8個字符,因爲人們必須使用它們來引用文檔。它們也將用於斷開連接的環境,因此您無法查找鏈中下一個可用的序列號。想知道你們中的一些人在這樣的應用程序中使用?如何在.net中生成8個字符的文檔ID或報告ID
0
A
回答
1
.net Framwork提供了RNGCryptoServiceProvider類,它使用加密服務提供程序(CSP)提供的實現實現加密隨機數生成器(RNG)。這個類通常用於生成隨機數。雖然我可以使用這個類在某種意義上生成唯一的數字,但它也不是相互衝突較少的。而且,當生成密鑰時,我們可以通過將密鑰設置爲字母數字而不是數字來使密鑰更復雜。所以,我使用這個類和一些字符掩碼來生成固定長度的唯一鍵。
private string GetUniqueKey()
{
int maxSize = 8 ;
int minSize = 5 ;
char[] chars = new char[62];
string a;
a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
chars = a.ToCharArray();
int size = maxSize ;
byte[] data = new byte[1];
RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
crypto.GetNonZeroBytes(data) ;
size = maxSize ;
data = new byte[size];
crypto.GetNonZeroBytes(data);
StringBuilder result = new StringBuilder(size) ;
foreach(byte b in data)
{ result.Append(chars[__b % (chars.Length -)>); }
<span class="code-keyword">return result.ToString();
}
http://www.codeproject.com/Articles/14403/Generating-Unique-Keys-in-Net
0
這是我最終使用。這是一個base36編碼。我借用了其他人的部分代碼,所以我不能說我全部都寫了,但我希望這可以幫助其他人。這將產生大約12位數的記錄ID或數據庫的唯一ID等。它僅使用一年中的最後兩位數字,所以它應該在100年內有效。
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Base36Converter
{
public partial class Form1 : Form
{
private const string CharList = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public Form1()
{
InitializeComponent();
}
//Base 36 number consists of only numbers and uppercase letters only.
private void button1_Click(object sender, EventArgs e)
{
if (textBox2.Text.Length > 0)
{
label3.Text = "";
//Get Date and Time Stamp
string temp1 = GetTimestamp(DateTime.Now);
//Turn it into a long number
long l = Convert.ToInt64(temp1);
//Now encode it as a base36 number.
string s1 = Encode(l);
//Get userID as a number, i.e. 1055 (User's index number) and create as a long type.
long l1 = Convert.ToInt64(textBox2.Text);
//Encode it as a base36 number.
string s2 = Encode(l1);
//Now display it as the encoded user number + datetime encoded number (Concatenated)
textBox1.Text = s2 + s1;
}
else
{
label3.Text = "User Number must be greater than 0. ie 1055";
}
}
public static String Encode(long input)
{
if (input < 0) throw new ArgumentOutOfRangeException("input", input, "input cannot be negative");
char[] clistarr = CharList.ToCharArray();
var result = new Stack<char>();
while (input != 0)
{
result.Push(clistarr[input % 36]);
input /= 36;
}
return new string(result.ToArray());
}
public static String GetTimestamp(DateTime value)
{
return value.ToString("yyMMddHHmmssffff");
}
private void Form1_Load(object sender, EventArgs e)
{
label3.Text = "";
}
}
}
+0
使用1055的輸入,它剛剛爲報告ID號生成了TBCUB7IT8TFN。 – SDanks
相關問題
- 1. 如何在ATOM文檔中生成一個好的ID?
- 2. .Net Assembly的文檔報告
- 3. 如何生成20個字符的字母數字唯一ID
- 4. 從Python中的字符串生成ID
- 5. 如何在.net中生成UTF-8字符集中的所有字符
- 6. 生成文檔ID服務器端
- 7. 如何使用uniqid生成6個字符長度的ID?
- 8. 在報告生成器中打印文本旁邊的圖片或字符(251)
- 9. Sharepoint 2010 - 自定義文檔ID提供程序 - 生成文檔ID - 但/_layouts/DocIdRedir.aspx?ID=ID不起作用
- 10. MS Access在過濾器生成報告時輸入參數ID
- 11. 使用字符串id通知或轉換字符串id來生成唯一的int id
- 12. 從字符串生成唯一的ID
- 13. 如何在PDF中生成TestNG報告?
- 14. 如何在jmeter中生成HTML報告
- 15. 如何在Calabash中生成報告 - android
- 16. 如何在Java中生成報告?
- 17. 如何在WPF中生成報告?
- 18. 報告查看器顯示「正在生成報告」.net
- 19. 如何從ID生成MySQL聲明ID
- 20. 從rdlc xml字符串生成報告
- 21. 如何在視覺上設計由檔案生成的報告?
- 22. libxml2:不報告字符,如'或「個別
- 23. 通過將模式存儲在XML文檔中生成報告
- 24. 如何生成報告
- 25. 如何生成XML報告?
- 26. 如何生成此報告?
- 27. 如何生成Checkstyle報告?
- 28. 如何在Specflow項目中生成報告(範圍報告)
- 29. 在Chrome中如何生成Tab ID?
- 30. 如何在node.js中生成會話ID?
感謝您的幫助。這對我來說似乎工作得很好。我不得不改變一些圍繞result.append行的代碼,因爲沒有_b變量和「chars.length - 」我刪除了 - 符號。看起來像你在網絡環境中使用它。但它現在對我很好。再次感謝。我不知道衝突會是什麼樣子,但我會嘗試一段時間。 – SDanks
您的歡迎希望它有助於解決您的問題。 – Pamma