如何在c#中创建值生成器ala hex

时间:2010-10-21 13:20:12

标签: c# algorithm

我想创建一个像这样工作的唯一值生成器: 我有8个字符用于字符,它会创建这样的值:

00000001 。 0000000z 。 00000010 。 0000001z

等。所以它会创建从00000001到zzzzzzzz的值。

我只有8个位置,因为这是数据库中字段的大小,我无法更改它。

提前致谢

4 个答案:

答案 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;
}