我想创建一个像这样工作的唯一值生成器: 我有8个字符用于字符,它会创建这样的值:
00000001 。 0000000z 。 00000010 。 0000001z
等。所以它会创建从00000001到zzzzzzzz的值。
我只有8个位置,因为这是数据库中字段的大小,我无法更改它。
提前致谢
答案 0 :(得分:1)
使用bultin random()函数,完成后将结果转换为十六进制。
答案 1 :(得分:1)
你确定你没有找GUID吗?
相同数量的字符,不同结构:550e8400-e29b-41d4-a716-446655440000 您可以创建新的GUID:
System.Guid.NewGuid().ToString(""N"")
每8个字符拆分一次,然后添加一个点,如下所示:
string getUnique()
{
char[] initial = System.Guid.NewGuid().ToString("N").ToCharArray();
string result="";
for(int i=0; i<initial.Count(); i++){
result=result + initial[i];
if((i+1)%4==0 && (i+1)!=initial.Count()){
result = result + ".";
}
}
return result;
}
答案 2 :(得分:1)
类似这样的事情
public class UniqueKeyMaker
{
private int[] keys = new int[8];
public void Reset()
{
for (int i = 0; i < keys.Length; i++)
keys[i] = 0;
}
public string NextKey()
{
string key = getCurrentKey();
increment();
return key;
}
private void increment()
{
int i = 7;
while (keys[i] == 35)
{
keys[i] = 0;
i--;
}
keys[i]++;
}
private string getCurrentKey()
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 8; i++)
{
if (keys[i] < 10)
sb.Append((char)(keys[i] + (int)'0'));
else
sb.Append((char)(keys[i] - 10 + (int)'a'));
}
return sb.ToString();
}
}
答案 3 :(得分:1)
您只想将int编码为基本36系统。这可能就像下面这样(可能有一些小错误,因为它是记事本代码):
string IntToID(long id)
{
string result="";
Contract.Require(id>=0);
while(id>0)
{
int digit=id%36;
char digitChar;
if(digit<10)
digitChar='0'+digit;
else
digitChar='a'+(digit-10);
result+=digitChar;
id/=36;
}
result=result.PadLeft('0',8);
return result;
}